Ridenominazione di fogli di lavoro in base a un elenco (Microsoft Excel)
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.