Kevin hat eine Arbeitsmappe mit 36 ​​Arbeitsblättern. Er benötigt in jedem Arbeitsblatt eine Möglichkeit, den Arbeitsblattnamen (von der Registerkarte des Arbeitsblatts)

zu erhalten in einer Zelle dieses Arbeitsblatts. Er hat eine benutzerdefinierte Funktion erstellt, die den Arbeitsblattnamen zurückgibt, jedoch auf allen 36 Arbeitsblättern denselben Namen zurückgibt – den Namen des Arbeitsblatts, das angezeigt wird, wenn die benutzerdefinierte Funktion ausgeführt wird. Er fragt sich, ob es ein Makro in UDF-Form (User Defined Function) gibt, das er verwenden kann und das immer den Namen des Blattes zurückgibt, auf dem die Funktion verwendet wird. Mit anderen Worten, in seiner Arbeitsmappe mit 36 ​​Arbeitsblättern sollten je nach Arbeitsblatt, in dem es verwendet wird, 36 verschiedene Ergebnisse zurückgegeben werden.

Die kurze Antwort lautet: Ja, es gibt einen Weg. Tatsächlich gibt es mehrere Möglichkeiten. Interessanterweise müssen Sie kein Makro oder keine Funktion verwenden, wenn Sie dies nicht möchten. Hier ist beispielsweise eine reguläre Arbeitsblattformel, die in jeder Zelle des Arbeitsblatts funktioniert:

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

Die Instanz der CELL-Funktion in dieser Formel gibt den vollständigen Namen des Arbeitsblatts einschließlich Dateiname und Dateipfad zurück. Die Verwendung der FIND-Funktion führt dazu, dass alles außer dem Arbeitsblattnamen entfernt wird.

Beachten Sie die Verwendung einer Zellreferenz (A1) in jeder Instanz der CELL-Funktion. Dadurch wird die CELL-Funktion gezwungen, den Namen des Arbeitsblatts zurückzugeben, das die Zellreferenz enthält. Ohne diese Option erhalten Sie für jede Instanz der Formel das gleiche Ergebnis (das erste Arbeitsblatt).

Sie sollten auch wissen, dass die Formel keine gültigen Ergebnisse zurückgibt, wenn Sie sie in einer neuen Arbeitsmappe verwenden – einer, die nicht gespeichert wurde. Sie müssen die Arbeitsmappe speichern, damit sie tatsächlich einen Namen hat, der von der CELL-Funktion erfolgreich zurückgegeben werden kann. Es funktioniert auch nicht richtig, wenn der Name der Arbeitsmappe oder des Arbeitsblatts ein Zeichen in Klammern („]“) enthält. In diesem Fall möchten Sie eine der anderen in diesem Tipp beschriebenen Lösungen verwenden.

Wenn Sie eine benutzerdefinierte Funktion bevorzugen, können Sie etwas Einfaches wie diese Funktion ausprobieren:

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

Diese Funktion liefert jedoch nicht das gewünschte Ergebnis, da immer der Name des aktiven Arbeitsblatts zurückgegeben wird. Das heißt, wenn Sie die Funktion auf jedem Blatt in Ihrer Arbeitsmappe aufgerufen haben, wird auf jedem dieser Arbeitsblätter immer der Name des aktiven Blattes anstelle des Namens des Blattes zurückgegeben, auf dem die Funktion verwendet wird. Die folgende Funktion liefert bessere Ergebnisse:

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

Wenn Sie der Meinung sind, dass Sie die Funktion verwenden möchten, um auf einen Arbeitsblattnamen an anderer Stelle in der Arbeitsmappe zu verweisen, funktioniert diese Funktion besser für Sie:

Function TabName3(cell As Range)

TabName3 = cell.Worksheet.Name End Function

Für diese Version der Funktion müssen Sie eine Zellreferenz – eine beliebige Zellreferenz – für eine Zelle im Arbeitsblatt angeben, deren Namen Sie verwenden möchten.

Wenn Sie keine benutzerdefinierte Funktion verwenden möchten, können Sie natürlich einfach ein Makro erstellen, das den Namen jeder Arbeitsblattregisterkarte in dieselbe Zelle in jedem Arbeitsblatt einfügt. Das folgende Makro durchläuft beispielsweise jedes Arbeitsblatt in der Arbeitsmappe und platziert den Namen jedes Arbeitsblatts in Zelle A1.

Sub TabName4()

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

Sie sollten beachten, dass dieser Ansatz nicht dynamisch ist (er muss jedes Mal neu ausgeführt werden, wenn Sie Arbeitsblattnamen ändern oder neue Arbeitsblätter hinzufügen). Es überschreibt auch alles, was sich in Zelle A1 befindet. (Wenn Sie möchten, dass die Arbeitsblattnamen in jedem Arbeitsblatt in einer anderen Zelle platziert werden, ändern Sie die in der Cells-Auflistung verwendeten Werte.)

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3793) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: