Kevin ha una cartella di lavoro contenente 36 fogli di lavoro. Deve avere il nome del foglio di lavoro presente in una cella di quel foglio di lavoro. Ha creato una funzione definita dall’utente che restituisce il nome del foglio di lavoro, ma restituisce lo stesso nome su tutti i 36 fogli di lavoro: il nome di qualsiasi foglio di lavoro viene visualizzato quando viene eseguita la funzione definita dall’utente. Si chiede se esiste una macro, in forma di funzione definita dall’utente (UDF), che può utilizzare e che restituirà sempre il nome del foglio su cui viene utilizzata la funzione. In altre parole, nella sua cartella di lavoro con 36 fogli di lavoro, dovrebbe restituire 36 risultati diversi, a seconda del foglio di lavoro in cui viene utilizzato.

La risposta breve è sì, c’è un modo. In effetti, ci sono un paio di modi. E, cosa abbastanza interessante, non è necessario utilizzare una macro o una funzione se non lo si desidera. Ad esempio, ecco una normale formula del foglio di lavoro che funzionerà in qualsiasi cella del foglio di lavoro:

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

L’istanza della funzione CELL in questa formula restituisce il nome completo del foglio di lavoro, inclusi il nome e il percorso del file. L’utilizzo della funzione TROVA comporta l’eliminazione di tutto tranne il nome del foglio di lavoro.

Notare l’uso di un riferimento di cella (A1) in ogni istanza della funzione CELL. Ciò impone alla funzione CELL di restituire il nome del foglio di lavoro che contiene il riferimento di cella. Senza di esso, otterrai lo stesso risultato (il primo foglio di lavoro) per ogni istanza della formula.

Dovresti anche sapere che la formula non restituirà risultati validi se la usi in una nuova cartella di lavoro, una che non è stata salvata. È necessario salvare la cartella di lavoro in modo che abbia effettivamente un nome che può essere restituito correttamente dalla funzione CELL. Inoltre, non funzionerà correttamente se il nome della cartella di lavoro o del foglio di lavoro contiene un carattere di parentesi quadra destra (“]”). In tal caso, ti consigliamo di utilizzare una delle altre soluzioni discusse in questo suggerimento.

Se preferisci usare una funzione definita dall’utente, puoi provare qualcosa di semplice, come questa funzione:

Function TabName1() As String     Application.Volatile     TabName1 = ActiveSheet.Name End Function

Questa funzione non fornirà il risultato desiderato, tuttavia, perché restituisce sempre il nome del foglio di lavoro attivo. Ciò significa che se hai la funzione chiamata su ciascuno dei fogli nella cartella di lavoro, restituirà sempre il nome del foglio attivo su ciascuno di quei fogli di lavoro, invece del nome del foglio su cui viene utilizzata la funzione. La seguente funzione fornisce risultati migliori:

Function TabName2() As String     Application.Volatile     TabName2 = Application.Caller.Parent.Name End Function

Se pensi di voler utilizzare la funzione per fare riferimento al nome di un foglio di lavoro altrove nella cartella di lavoro, allora questa funzione funzionerà meglio per te:

Function TabName3(cell As Range)

TabName3 = cell.Worksheet.Name End Function

Questa versione della funzione richiede di fornire un riferimento di cella, qualsiasi riferimento di cella, a una cella del foglio di lavoro di cui si desidera utilizzare il nome.

Ovviamente, se preferisci non utilizzare una funzione definita dall’utente, potresti semplicemente creare una macro che inserisca il nome di ciascuna scheda del foglio di lavoro nella stessa cella in ogni foglio di lavoro. Ad esempio, la seguente macro passa attraverso ciascuno dei fogli di lavoro nella cartella di lavoro e inserisce il nome di ogni foglio di lavoro nella cella A1.

Sub TabName4()

For J = 1 To ActiveWorkbook.Sheets.Count         Sheets(J).Cells(1, 1).Value = Sheets(J).Name     Next End Sub

Si noti che questo approccio non è dinamico (deve essere rieseguito ogni volta che si cambiano i nomi dei fogli di lavoro o si aggiungono nuovi fogli di lavoro). Inoltre sovrascrive tutto ciò che si trova nella cella A1. (Se vuoi che i nomi dei fogli di lavoro vengano inseriti in una cella diversa su ogni foglio di lavoro, modifica i valori utilizzati nella raccolta Celle.)

|| _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.

link: / excelribbon-ExcelTipsMacros [Fare clic qui per aprire quella pagina speciale in una nuova scheda del browser].

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

Questo suggerimento (11419) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui:

link: / excel-Getting_the_Name_of_the_Worksheet_Into_a_Cell [Ottenere il nome del foglio di lavoro in una cella].