Tramite questa macro è possibile creare un comando che permetta di inserire un numero desiderato di fogi in una cartella di Excel assegnando contestualmente un nome ad ognuno di loro; vediamo come.
Prima di tutto dovendo lavorare in VBA apriamo il relativo ambiente.
In Excel 2003
Menù Strumenti – Macro – Visual Basic Editor
In Excel 2007
Bottone di Office – Pulsante Opzioni di Excel – Impostazioni generali – Opzione “Mostra scheda Sviluppo sulla barra multifunzione”
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic
In Excel 2010
File – Opzioni – Personalizzazione barra multifunzione – Selezionare Sviluppo nella sezione “Schede principali”
Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci – Modulo)
Copiare nel modulo il codice riportato sotto:
Sub NuoviFogli()
Dim Sh As Worksheet
Dim NomeFoglio As String
Dim doppio As String
Dim NomeBuono As Boolean
Dim CaratteriVietati
CaratteriVietati = “:/?*[]”
Dim i, j As Integer
Dim quanti As Integer
Dim n As Integer
quanti = InputBox(“Quanti fogli nuovi vuoi inserire?”, “Numero fogli nuovi”)
For n = 1 To quanti
Do
NomeBuono = True
NomeFoglio = InputBox(“Qual’ è il nome che vuoi dare al nuovo foglio (” & n & “)?”, _
“Nominare il nuovo foglio”)
If NomeFoglio <> “” Then
‘verifica se il nome non esiste
For i = 1 To ActiveWorkbook.Worksheets.Count
If UCase(NomeFoglio) = UCase(Worksheets(i).Name) Then
doppio = MsgBox(“Un foglio con il nome scelto è già presente, vuoi sostituirlo?”, vbYesNo + vbOKOnly, _
“Nome già usato”)
If doppio = vbYes Then
‘sostituisce il messaggio Allert di Excel
allarme = MsgBox(“Nel foglio potrebbero esistere dei dati,” _
& ” per eliminare in modo permanente il foglio scegliere Ok”, vbCritical + vbOKCancel, “Messaggio di allarme”)
If allarme = vbOK Then
Application.DisplayAlerts = False
Worksheets(NomeFoglio).Delete
Application.DisplayAlerts = True
Exit For
Else
NomeBuono = False
Exit For
End If
Else
NomeBuono = False
Exit For
End If
End If
Next
‘verifica che il nome non abbia più di 31 caratteri
If Len(NomeFoglio) > 31 Then
MsgBox “Il numero dei caratteri (” & _
Len(NomeFoglio) & “) del nome è troppo grande,” _
+ vbCrLf + ” il massimo è 31 per excel.”, _
vbCritical + vbInformation, “Nome troppo lungo”
NomeBuono = False
End If
‘verifica se nel nome non ci sono caratteri vietati
For j = 1 To Len(CaratteriVietati)
If InStr(1, NomeFoglio, Mid(CaratteriVietati, j, 1), vbTextCompare) > 0 Then
MsgBox “I caratteri seguenti : ” & _
CaratteriVietati & ” sono vietati nel nome del foglio.”, _
vbCritical + vbOKOnly, “Carattere vietato “
NomeBuono = False
Exit For
End If
Next
Else
Exit Sub
End If
Loop Until NomeBuono = True
Set Sh = Worksheets.Add ‘per aggiungere come primo foglio
‘o per aggiungere il foglio come ultimo Set Sh = Worksheets.Add(after:=Worksheets(Worksheets.Count))
Sh.Name = NomeFoglio
Next n
End Sub
Chiudere la finestra di Visual Basic e tornare in Excel.
Passiamo quindi all’elenco delle Macro
In Excel 2003
Strumenti -> Macro -> Macro
In Excel 2007 o 2010
Scheda Sviluppo -> Pulsante Macro
Eseguire quindi la Macro “NuoviFogli”: apparirà una finestra di dialogo nella quale dovremo indicare quanti fogli vogliamo inserire nella cartella di Excel; cliccando su Ok dovremo indicare in successione il nome di ogni foglio che verrà inserito.
Infine se vogliamo rendere disponibile questa funzione in modo tale da trovarla all’avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.
Informatics, ski racer, loves travels, Finland, Norway, mountains, squash, photography, Drones and RC Helicopter
Ciao, mi servirebbe un aiuto: come posso fare per avere un file (mensile, es. gennaio 2013) dove i fogli di lavoro sono i giorni del mese? grazie in anticipo!
Ciao,
ho provato a copiaincollare il tuo codice ma quando avvio la macro mi da Errore di Sintassi su
Dim CaratteriVietati
CaratteriVietati = “:/?*[]”
Puoi aiutarmi? scusa non sono molto pratico di Visual Basic ma il tuo codice mi aiuterebbe molto!
@Christian: molto probabilmente si tratta delle virgolette che nel fare copia incolla non sono quelle giuste; prova, nella finestra di Visual Basic, a cancellare le virgolette e ri-digitarle con la tastiera.
salve,
ho trovato queste istruzioni interessanti e credo che, con qualche modifica, farebbero al caso mio.
Ho una tabella PRINCIPALE con 200 nomi e codici fiscali.
Avrei bisogno di creare un foglio per ciascun nome/codice fiscale ma non bianco bensì copiando dal secondo foglio (che fa da MODELLO).
A ciascun foglio dovrebbe essere dato come nome il codice fiscale della tabella principale.
Secondo lei è una cosa fattibile?
L’alternativa potrebbe essere quella di creare in automatico – per ogni codice fiscale – 12 righe corrispondenti ai mesi dell’anno (e poi copiare il resto delle formule su tutte le righe).
Grazie
Ho provato a creare una macro in Excel che ha generato questo codice che trova qui sotto.
I problemi sono 2
Se la ripeto sul nominativo seguente utilizza i riferimenti assoluti della prima riga anziché relativi alla riga su cui mi trovo.
Il riferimento dei figlio MODELLO devono invece restare fissi.
Dovrei ripetere la macro per 200 volte (ma questo sarebbe il meno)
Sub Aggiungi_righe_mesi()
‘
‘ Aggiungi_righe_mesi Macro
‘ Macro per l’aggiunta di 11 righe dopo ogni nominativo, copia dei dati nelle prime tre colonne) nelle 11 righe sottostanti e copia di una serie di celle FISSE con i nomi dei mesi e le formule dal foglio MODELLO.
‘
‘ Scelta rapida da tastiera: CTRL+a
‘
Rows(“4:14”).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range(“A3:C3”).Select
Selection.Copy
Range(“A4:A14”).Select
ActiveSheet.Paste
Sheets(“MODELLO”).Select
Range(“B3:Q14”).Select
Application.CutCopyMode = False
Selection.Copy
Sheets(“NOMINATIVI”).Select
Range(“D3”).Select
ActiveSheet.Paste
End Sub