Gilbert ha un foglio di lavoro (denominato “Controllo”) che contiene un elenco dei nomi dei fogli di lavoro desiderati nelle celle A1: A12. Ha bisogno di un modo, in una macro, per rinominare ciascuno degli altri 12 fogli di lavoro nella cartella di lavoro in base a quell’intervallo di celle. I nomi dei fogli di lavoro non devono essere dinamici; hanno solo bisogno di essere rinominati quando esegue la macro.

Il nucleo dello sviluppo di una macro per soddisfare questa esigenza è fare affidamento sulla proprietà Name di ogni foglio di lavoro che si desidera rinominare. Ad esempio, potresti usare una macro molto semplice come questa:

Sub RenameSheets()

Dim c As Range     Dim J As Integer

J = 0     For Each c In Range("A1:A12")

J = J + 1         If Sheets(J).Name = "Control" Then J = J + 1         Sheets(J).Name = c.Text     Next c End Sub

La macro passa semplicemente attraverso l’intervallo di celle A1: A12 e, se il foglio di lavoro successivo non è denominato “Controllo”, rinomina il foglio di lavoro con il valore della cella.

Come notato, questa macro è molto semplicistica e dovrebbe, con ogni probabilità, essere molto più robusta. Ad esempio, cosa si dovrebbe fare se ci sono più (o meno) di 13 fogli di lavoro nella cartella di lavoro corrente? Cosa si dovrebbe fare se ci sono celle vuote nell’intervallo A1: A12? Cosa si dovrebbe fare se qualcuno esegue la macro e “Controllo” non è il foglio di lavoro attivo?

Cosa si dovrebbe fare se ci sono due valori identici in A1: A12? Cosa succede se sono presenti spazi iniziali o finali su uno o più nomi nell’intervallo A1: A12? Queste e (molto probabilmente) tutta una serie di altre domande possono influenzare l’aspetto finale della macro. Ecco una versione commentata della macro che tiene conto di molte delle possibilità appena menzionate:

Sub RenameSheets()

Dim c As Range     Dim J As Integer     Dim K As Integer     Dim sName As String     Dim w(12) As String     Dim bGo As Boolean     Dim sTemp As String

bGo = True     If Worksheets.Count <> 13 Then         ' Check to make sure exactly 13 worksheets in workbook         bGo = False         sTemp = "There are more than 13 worksheets."

End If     If ActiveSheet.Name <> "Control" Then         ' Check to make sure Control is active         bGo = False         sTemp = "Control worksheet is not active."

Else         ' Check for empty and duplicate cells in range         J = 0         For Each c In Range("A1:A12")

sName = Trim(c.Text)

If sName <> "" Then                 For K = 1 to J                     If LCase(w(K)) = LCase(sName) Then                         bGo = False                         sTemp = "Duplicate sheet names in list."

End If                 Next K                 If bGo Then                     ' Everything still good; add name                     J = J + 1                     w(J) = sName                 End If             End If         Next c     End If

If bGo Then         K = 0         For J = 1 To 12             K = K + 1             If Sheets(K).Name = "Control" Then K = K + 1             Sheets(K).Name = w(J)

Next J     Else         MsgBox(sTemp)

End If End Sub

Notate quanto è lunga la seconda versione della macro rispetto alla prima? Ogni volta che inizi ad aggiungere più controlli in una macro, può davvero durare molto più a lungo che senza i controlli. Il vantaggio nell’aggiunta dei controlli, ovviamente, è che la tua macro ha meno probabilità di incorrere in problemi poiché viene utilizzata da persone diverse da te.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (1506) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.