Immaginiamo di voler aggiungere, in modo programmatico, un nuovo foglio con un nome e la data corrente, per esempio IMPORTAZIONE 10 09 2018.
Quello che vedremmo come risultato nella cartella di lavoro in Excel sarebbe qualcosa di analogo:
Per farlo costruiamo una funzione in VBA nel modo seguente:
1 2 3 4 5 6 7 8 9 10 |
Function CreaNuovoFoglio() As Worksheet Dim WS As Worksheet Set WS = Sheets.Add WS.Name = "IMPORTAZIONE " & Format(Now, "dd mm yyyy") Set CreaNuovoFoglio = WS End Function |
Testiamo la funzione mettendola dentro una sub:
1 2 3 4 5 6 7 8 |
Sub NuovoFoglio() Dim WS As Worksheet Set WS = CreaNuovoFoglio WS.Range("A1") = "Ok Funziona!" End Sub |
Come è possibile notare la funzione restituisce il riferimento al nuovo foglio creato, che possiamo utilizzare nella sub di esempio per scrivere, per esempio, dentro ad una cella.
Se volessimo aggiungere un controllo, nella solita funzione CreaNuovoFoglio, perché non ci siano fogli duplicati, sarebbe sufficiente modificare la funzione nella maniera seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Function CreaNuovoFoglio() As Worksheet 'Creazione nome Dim nome As String Dim trovato As Boolean Dim cont As Integer nome = "IMPORTAZIONE " & Format(Now, "dd mm yyyy") cont = 0 Do trovato = False If cont <> 0 Then nome_tmp = nome & " (" & cont & ")" Else nome_tmp = nome End If For Each foglio In Worksheets() If foglio.Name = nome_tmp Then trovato = True End If Next foglio If trovato = False Then nome = nome_tmp Exit Do End If cont = cont + 1 Loop 'Creazione foglio Dim WS As Worksheet Set WS = Sheets.Add WS.Name = nome Set CreaNuovoFoglio = WS End Function |
In questo modo al nome del foglio viene posposto un termine n-simo, in questo caso (1), (2) ecc. Se lo si desidera chiaramente si può aggiungere qualunque termine oppure decidere di interrompere l’operazione.