Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblatt Name auslesen und in Zelle schreiben

Tabellenblatt Name auslesen und in Zelle schreiben
21.04.2015 09:47:52
Fabian
Hallo zusammen,
Zum Verständnis meines Problems habe ich ein Bild angehängt und den relevanten Code eingefügt:
Userbild
<pre>Sub NewGroup()
Dim Zeile&, x&, MyMaxRow
For x = 1 To 220 'Spalten A-HL
Zeile = Cells(Rows.Count, x).End(xlUp).Row
MyMaxRow = IIf(Zeile > MyMaxRow, Zeile, MyMaxRow)
Next
Range("A13:HN28").Copy Destination:=Range("A" & MyMaxRow + 1)
'Bereich A12-HL27 kopieren und nach der letzen benutzten Zeile ausgeben
End Sub</pre>
<pre>Sub Kopieren()
Dim x As Integer
ActiveWorkbook.Sheets("Muster Sheet").Copy _
After:=ActiveWorkbook.Sheets("Timeline")
NewName = InputBox("Please insert the group name")
ActiveSheet.Name = NewName
End Sub</pre>
Also mit dem Auslösen des Buttons "Add New Group" wird der Bereich A13:HN28 kopiert und nach der letzten Zeile wieder eingefügt. Ebenfalls wird ein neues Tabellenblatt erzeugt und man wird aufgefordert einen Namen einzugeben.
Zu meiner Frage:
Gibt es eine Möglichkeit den Tabellennamen des erzeugten Blattes auszulesen und in den neuen Bereich, C29:C44, einzufügen? Wie auf dem Bild zu sehen ist, sind die Zellen C13:C28 verbunden.
Das ganze sollte dann mit jeder neuen Gruppe, die man hinzufügt, wiederholt werden.
Gruß
Fabian

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt Name auslesen und in Zelle schreiben
21.04.2015 10:21:28
Michael
Hallo Fabian!
Auf den Tabellenblattnamen des aktiven Blattes greifst Du ja bereits in Deinem Code zu:

ActiveSheet.Name = NewName

In diesem Fall setzt Du ihn, aber Du kannst diesen natürlich auch in eine Zelle schreiben lassen:
Range("A2").Value = ActiveSheet.Name
Genauso kannst Du den Blattnamen eines beliebigen Tabellenblattes abfragen: zB den Namen des 5. Blattes

Range("A2").Value = Worksheets(5).Name

In Deinem Code ist aber der neue Blattname ja sowieso schon in der Variablen "NewName" gespeichert - Du kannst ja auch mit dieser noch weiterarbeiten und bspw.
Range("C29:C44").Value = NewName
angeben.
LG
Michael

Anzeige
AW: Tabellenblatt Name auslesen und in Zelle schreiben
21.04.2015 11:33:20
Fabian
Hallo Michael,
Vielen Dank erstmal für deine schnelle Hilfe.
Kann ich auch soetwas schreiben wie: Range("C" MyMaxRow + 1).Value = NewName ?
Also, dass es automatisiert immer die Zelle bennent?

AW: Tabellenblatt Name auslesen und in Zelle schreiben
21.04.2015 11:43:56
Michael
Hallo Fabian!
Gerne. So kannst Du es nicht schreiben, aber ähnlich:
Range("C"&MyMaxRow + 1).Value = NewName Wichtig ist hier das "&".
Also, dass es automatisiert immer die Zelle bennent?
Da kommt es jetzt drauf an: Wenn sich Deine Variable MyMaxRow innerhalb des Makros, oder einer Schleife, immer wieder ändert, dann wird das natürlich entsprechend jeweils mit +1 hochgezählt. Wenn Du aber MyMaxRow nur einmal einen Wert innerhalb des Makros zuweist (ist glaube ich so in Deinem Code), dann bleibt es eben bei diesem Wert +1 und es wird nicht automatisch hochgezählt.
D.h. hier müsste entweder eine Art Schleifendurchlauf greifen oder Du setzt den Blattnamen gleich direkt in einem Bereich; so wie ich vorhin zB geschrieben habe

Range("C29:C44").Value = NewName

Damit steht dann in allen Zellen von C29:C44 der Blattname (bzw. der Inhalt der Variablen NewName).
LG
Michael

Anzeige
AW: Tabellenblatt Name auslesen und in Zelle schreiben
24.04.2015 10:09:17
Fabian
Ich habe nun versucht die Code-Zeile einzufügen, bekomm es aber leider nicht zum laufen.
Es handelt sich um die Fettgedruckte Zeile unten im Code. Ziel ist immer noch die letzte benutzte Zelle in Spalte C des TimeLine sheets mit dem Namen zu versehen der für das neue Tabellenblatt eingegeben wurde.
Kannst du mir dabei nochmals helfen ?
Sub MusterKopieren()

Dim NewName As String
ActiveWorkbook.Sheets("Muster Sheet").Copy _
After:=ActiveWorkbook.Sheets("TimeLine")
NewName = InputBox("Please insert Group Name")
ActiveSheet.Name = NewName
Sheets("TimeLine").Range("C" & MyMaxRow).Value = NewName
End Sub


Anzeige
AW: Tabellenblatt Name auslesen und in Zelle schreiben
26.04.2015 14:34:19
Michael
Hallo Fabian!
Wenn Dein angegebener Code vollständig ist (und Du beim Kopieren-und-Einfügen) nichts augelassen hast, dann fehlt Dir eine Wert-Zuweisung an die Variable "MyMaxRow".
Denn nur mit "MyMaxRow" kann Excel natürlich nichts anfangen - das ist ja nur der Name für einen Wert, aber welchen Wert hat dieser Name? Den musst Du natürlich zuweisen, so wie Du auch Deiner Variablen "NewName" einen Wert zuweist, und zwar in dem Fall über eine Inputbox (in diesem Fall einen Text, String-Wert).
D.h. in Deinem Code fehlt dann zumindest noch eine Deklarierung der "MyMaxRow"-Variablen, zB so
Dim MyMaxRow as Long
das schreibst Du am Besten zur "Dim"-Zeile für NewName.
Und dann musst MyMaxRow noch einen Wert, nämlich die Zeilennummer der letzten befüllten Zelle im Blatt "TimeLine", Spalte C erhalten. Das machst Du dann so:
MyMaxRow = Worksheets("TimeLine").Cells(Rows.Count, 3).End(xlUp).Row
Sheets("TimeLine").Range("C" & MyMaxRow).Value = NewName
In diesem Fall kannst Du Dir aber die Variable MyMaxRow eigentlich auch ganz sparen (hab das nur so angeführt, weil Du explizit danach gefragt hast). Das gleiche würdest Du so erreichen:
Worksheets("TimeLine").Cells(Rows.Count, 3).Value = NewName
Dabei kannst Du also auch die "Dim"-Zeile etc. für MyMaxRow weglassen, weil Du die gesamte Variable nicht brauchst.
Hilft?!
LG
Michael

Anzeige
AW: Tabellenblatt Name auslesen und in Zelle schreiben
27.04.2015 07:31:57
Fabian
Hallo Michael,
erstmal sorry, dass ich erst jetzt antworte. Die MyMaxRow ist bereits Deklariert, dass hätte ich noch dazuschreiben sollen.
mit

MyMaxRow = Worksheets("TimeLine").Cells(Rows.Count, 3).End(xlUp).Row
Sheets("TimeLine").Range("C" & MyMaxRow).Value = NewName


funktioniert es wunderbar! Vielen Dank!!
Gruß
Fabian

Anzeige
Gern, freut mich. Danke für die Rückmeldung, owT
27.04.2015 08:59:08
Michael
.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblattname in Zelle einfügen


Schritt-für-Schritt-Anleitung

Um den Tabellenblattnamen in eine Zelle einzufügen, kannst Du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Anleitung, wie Du dies umsetzen kannst:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject (deine Arbeitsmappe), wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Sub BlattnameInZelleEinfügen()
       Dim NewName As String
       NewName = InputBox("Bitte Namen für das neue Blatt eingeben:")
       ActiveSheet.Name = NewName
       ' Blattnamen in Zelle C29 einfügen
       Worksheets("DeinSheetName").Range("C29").Value = NewName
    End Sub
  4. Ändere "DeinSheetName" auf den Namen deines Arbeitsblatts, wo Du den Namen einfügen möchtest.

  5. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle BlattnameInZelleEinfügen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Name ist ungültig"

    • Lösung: Stelle sicher, dass der eingegebene Name den Excel-Benennungsregeln entspricht (z.B. keine Sonderzeichen, nicht länger als 31 Zeichen).
  • Fehler: "Das Makro konnte nicht gefunden werden"

    • Lösung: Überprüfe, ob das Makro im richtigen Modul gespeichert wurde und der Modulname korrekt ist.
  • Fehler: Zelle bleibt leer

    • Lösung: Stelle sicher, dass Du den richtigen Arbeitsblattnamen in den Code eingegeben hast.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, den Tabellenblattnamen in eine Zelle einzufügen:

  1. Formel verwenden: Du kannst die folgende Formel direkt in eine Zelle eingeben:

    =ZELLE("filename", A1)

    Diese Formel gibt den vollständigen Pfad und den Blattnamen zurück. Du kannst den Namen mit TEXT-Funktionen extrahieren.

  2. Excel VBA für mehrere Blätter: Um die Namen aller Tabellenblätter auszulesen, kannst Du den folgenden VBA-Code verwenden:

    Sub AlleBlattnamenAuslesen()
       Dim i As Integer
       For i = 1 To ThisWorkbook.Sheets.Count
           Worksheets("DeinSheetName").Cells(i, 1).Value = ThisWorkbook.Sheets(i).Name
       Next i
    End Sub

Praktische Beispiele

  • Beispiel 1: Neues Blatt erstellen und Namen in Zelle einfügen.

    Sub NeuesBlattErstellen()
       Dim NewName As String
       NewName = InputBox("Neuen Blattnamen eingeben:")
       Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = NewName
       Worksheets("DeinSheetName").Range("C29").Value = NewName
    End Sub
  • Beispiel 2: Aktuellen Blattnamen auslesen und in eine Zelle schreiben.

    Sub AktuellenBlattnamenAuslesen()
       Worksheets("DeinSheetName").Range("A1").Value = ActiveSheet.Name
    End Sub

Tipps für Profis

  • Dynamische Zellenreferenzen: Verwende Cells(MyMaxRow + 1, 3).Value für mehr Flexibilität bei der Zellenreferenzierung.
  • Fehlerbehandlung: Implementiere On Error Resume Next in Deinem VBA-Code, um Fehler abzufangen und die Ausführung fortzusetzen.
  • VBA-Optimierung: Deaktiviere Bildschirmaktualisierungen während der Ausführung des Codes mit Application.ScreenUpdating = False, um die Ausführung zu beschleunigen.

FAQ: Häufige Fragen

1. Wie kann ich den Namen eines bestimmten Tabellenblatts auslesen? Du kannst dies mit der Formel =BLATTNAME(A1) oder in VBA mit Worksheets("TabellenblattName").Name.

2. Kann ich den Namen des Tabellenblattes in eine andere Zelle einfügen, als die, die ich gerade verwendet habe? Ja, Du kannst den gewünschten Zellbereich in der VBA-Anweisung ändern, um den Blattnamen woanders einzufügen, wie z.B. Worksheets("DeinSheetName").Range("D1").Value = ActiveSheet.Name.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige