Ottenere il nome del foglio di lavoro in una cella

Kevin ha una cartella di lavoro che contiene 36 fogli. Egli ha bisogno di un modo, in ciascuno dei fogli, per avere il nome di prospetto (dalla scheda del foglio di lavoro) in una cella di tale foglio. 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 si esegue la funzione definita dall'utente. Si chiede se esiste una macro, in funzione definita dall'utente forma (UDF), che egli può usare che sarà sempre tornare il nome del foglio su cui viene utilizzata la funzione. In altre parole, nel suo lavoro 36-foglio, deve restituire 36 risultati diversi, a seconda del foglio di lavoro in cui viene utilizzato.

La risposta è sì, c'è un modo. In realtà ci sono un paio di modi. E, abbastanza interessante, non è necessario utilizzare una macro o funzione se non si desidera. Ad esempio, qui è una formula del foglio di lavoro regolare che funzionerà in qualsiasi cella del foglio di lavoro:

= MID (CELL ("filename", A1), FIND ("]", CELL ("nomefile", A1)) + 1.255)

L'istanza della funzione CELL in questa formula restituisce il nome completo del foglio di lavoro, compreso il nome del file e il percorso del file. L'utilizzo dei risultati della funzione FIND nella spoliazione di tutto tranne il nome del foglio di lavoro.

Si noti l'uso di un riferimento di cella (A1) in ogni istanza della funzione CELL. Questo costringe la funzione CELL per restituire il nome del foglio di lavoro che contiene il riferimento di cella; senza di essa, si otterrà lo stesso risultato (il primo foglio di lavoro) per ogni istanza della formula.

Si dovrebbe anche sapere che la formula non restituirà risultati validi se lo si utilizza in una nuova cartella di lavoro, uno che non è stato salvato. È necessario salvare la cartella di lavoro in modo che in realtà ha un nome che può essere restituito dalla funzione CELL con successo. Inoltre, non funzionerà correttamente se il nome cartella di lavoro o foglio di lavoro contiene un carattere parentesi destra ("]"). In questo caso, ti consigliamo di utilizzare una delle altre soluzioni discusse in questo suggerimento.

Se si preferisce utilizzare una funzione definita dall'utente, si può provare qualcosa di semplice, come questa funzione:

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

Questa funzione non fornisce il risultato desiderato, tuttavia, perché restituisce sempre il nome del foglio attivo. Ciò significa che se si ha la funzione chiamata su ciascuno dei fogli nella cartella di lavoro, essa ritorna sempre il nome del foglio attivo su ciascuno di tali fogli, invece del nome del foglio su cui viene utilizzata la funzione. La funzione seguente fornisce i risultati migliori:

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

Se si pensa che si desidera utilizzare la funzione per fare riferimento a un nome di foglio di lavoro altrove nella cartella di lavoro, quindi questa funzione funzionerà meglio per voi:

Funzione TabName3 (cella come gamma)
TabName3 = cell.Worksheet.Name
End Function

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

Naturalmente, se si preferisce non utilizzare una funzione definita dall'utente, si potrebbe semplicemente creare una macro che roba il nome di ogni scheda di prospetto nella stessa cella in ogni foglio di lavoro. Ad esempio, il seguente passi macro attraverso ciascuno dei fogli di lavoro nella cartella di lavoro e pone il nome di ogni foglio di lavoro nella cella A1.

Sub TabName4 ()
Per J = 1 Per ActiveWorkbook.Sheets.Count
Sheets (J) .Cells (1, 1) .Value = Sheets (J) .Name
Il Prossimo
End Sub

Si dovrebbe notare che questo approccio non è dinamica (occorre eseguire nuovamente ogni volta che si cambia i nomi di foglio di lavoro o di aggiungere nuovi fogli di lavoro). Esso sovrascrive anche tutto ciò che è nella cella A1. (Se volete i nomi di foglio di lavoro posti in una cella diversa su ogni foglio di lavoro, modificare i valori utilizzati per la raccolta Cells.)

ExcelTips è la vostra fonte per la formazione Microsoft Excel conveniente. Questo suggerimento (11419) si applica a Microsoft Excel 2007 e il 2010. Si può trovare una versione di questo suggerimento per l'interfaccia del menu precedente di Excel qui: Ottenere il nome del foglio di lavoro in una cella.