Determinazione del numero di un foglio di lavoro (Microsoft Excel)
Lawrence ha bisogno di un modo per determinare il numero di un foglio di lavoro anche se il foglio di lavoro è stato rinominato. Ad esempio, se un foglio di lavoro si chiama Foglio11 è abbastanza facile capire che è il foglio 11. Se rinomina il foglio in Gennaio, Lawrence ha ancora bisogno di un modo per sapere che questo è il foglio 11.
La soluzione a questo problema viene eseguita meglio con una funzione definita dall’utente (una macro). Esistono, in realtà, due numeri che la macro potrebbe restituire per ogni foglio di lavoro. Il primo è il numero di indice per il foglio di lavoro. Questo numero rappresenta l’indice dell’oggetto Foglio di lavoro del foglio di lavoro all’interno della raccolta Fogli di lavoro. Questo valore può essere restituito da una macro simile alla seguente:
Function SheetNumber1(shtname As String) Dim sht As Worksheet Application.Volatile For Each sht In ThisWorkbook.Worksheets If LCase(sht.Name) = LCase(shtname) Then SheetNumber1 = sht.Index Exit Function End If Next SheetNumber1 = -1 End Function
Questa funzione, se utilizzata in un foglio di lavoro, restituirà il numero di indice di qualsiasi foglio di lavoro il cui nome viene passato alla funzione. Se il nome passato alla funzione non esiste nella raccolta dei fogli di lavoro, la funzione restituisce un valore -1. Ad esempio, quanto segue utilizzato in una cella restituirebbe il valore di indice per il foglio di lavoro denominato “Gennaio” all’interno della raccolta:
=SheetNumber("January")
Il problema con questo approccio è che l’ordine degli oggetti foglio di lavoro nella raccolta fogli di lavoro può cambiare nel tempo. Pertanto, non è sempre possibile presumere che l’undicesimo foglio della raccolta sia il foglio originariamente Foglio11.
Un modo più coerente per individuare il nome originale di un foglio di lavoro (indipendentemente da come viene rinominato) consiste nell’usare ciò a cui Visual Basic si riferisce come “CodeName” del foglio. Questa è una proprietà del foglio di lavoro e può essere determinata nel modo seguente:
Function SheetNumber2(shtname As String) Dim sht As Worksheet Dim sTemp As String Application.Volatile For Each sht In ThisWorkbook.Worksheets If LCase(sht.Name) = LCase(shtname) Then sTemp = sht.CodeName SheetNumber2 = Val(Mid(sTemp, 6, 4)) Exit Function End If Next SheetNumber2 = -1 End Function
La proprietà CodeName è di sola lettura in una macro. Viene assegnato al momento della creazione del foglio di lavoro, ma è possibile modificarlo manualmente nell’editor di Visual Basic. CodeName è sempre una stringa, che rappresenta il primo nome che è stato applicato al foglio di lavoro, quindi sarà qualcosa come “Sheet11”. Una volta impostato il CodeName, anche se il foglio di lavoro viene rinominato (ad esempio “gennaio”), rimarrà stabile (“Foglio11”).
Nell’esempio di macro (SheetNumber2) la proprietà CodeName è assegnata alla variabile sTemp. Questo sarà, nella maggior parte dei casi, qualcosa come “Sheet3” o “Sheet11”. Quindi, la macro acquisisce quindi il valore numerico di tutto ciò che inizia con il sesto carattere (subito dopo “Foglio”). Questo è il valore restituito dalla funzione.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (3398) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: