Tabellennamen auslesen und in Tabelle schreiben
Schritt-für-Schritt-Anleitung
Um alle Tabellennamen, die mit einem "I" beginnen, per VBA auszulesen und in einen bestimmten Zellbereich des aktiven Worksheets zu schreiben, kannst Du den folgenden Code verwenden:
Option Explicit
Public Sub TabellennamenAuslesen()
Dim startRow As Long, ws As Worksheet
startRow = 78
If MsgBox("Makro starten?", vbYesNo + vbQuestion, "Frage") = vbYes Then
For Each ws In ThisWorkbook.Worksheets
If startRow > 85 Then Exit For
If Left(ws.Name, 1) = "I" Then
Cells(startRow, 19).Value = ws.Name
startRow = startRow + 1
End If
Next ws
End If
End Sub
Erklärung der Schritte:
- Variable deklarieren: Die
Option Explicit
Anweisung zwingt Dich dazu, alle Variablen zu deklarieren.
- Startzeile festlegen: Mit
startRow = 78
legst Du die Zeile fest, ab der die Tabellennamen eingetragen werden.
- MsgBox zur Bestätigung: Die MsgBox fragt, ob das Makro gestartet werden soll.
- Durch alle Worksheets iterieren: Mit
For Each ws In ThisWorkbook.Worksheets
durchläufst Du alle Arbeitsblätter.
- Tabellennamen prüfen: Wenn der Name des Arbeitsblatts mit "I" beginnt, wird der Name in die angegebene Zelle geschrieben.
Häufige Fehler und Lösungen
-
Fehler: "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt"
- Lösung: Stelle sicher, dass Du
ws
als Worksheet deklariert hast, bevor Du damit arbeitest.
-
Fehler: "End If ohne If-Block"
- Lösung: Überprüfe die Struktur Deines Codes, insbesondere die Anzahl der
If
- und End If
-Anweisungen.
-
Fehler: "Variable nicht definiert"
- Lösung: Wenn
Option Explicit
verwendet wird, musst Du alle Variablen deklarieren. Verwende einen anderen Namen als "Worksheet", um Konflikte mit VBA-Schlüsselwörtern zu vermeiden.
Alternative Methoden
Eine alternative Methode zum Auslesen der Tabellennamen ist die Verwendung von Excel-Formeln, allerdings ist dies in der Regel nicht so flexibel wie VBA.
Du kannst auch Power Query verwenden, um Daten aus verschiedenen Tabellen zu konsolidieren, jedoch ist hierfür ein gewisses Maß an Einarbeitung notwendig.
Praktische Beispiele
Wenn Du beispielsweise nur die Tabellennamen in eine andere Tabelle im selben Workbook übertragen möchtest, kannst Du den Code so anpassen:
Public Sub TabellennamenKopieren()
Dim startRow As Long, ws As Worksheet
startRow = 1
For Each ws In ThisWorkbook.Worksheets
If Left(ws.Name, 1) = "I" Then
Worksheets("Zielblatt").Cells(startRow, 1).Value = ws.Name
startRow = startRow + 1
End If
Next ws
End Sub
Hierbei wird angenommen, dass Du die Tabellennamen in das Blatt mit dem Namen "Zielblatt" übertragen möchtest.
Tipps für Profis
- Verwende Option Explicit, um sicherzustellen, dass Du alle Variablen korrekt deklarierst. Dies hilft Dir, Fehler frühzeitig zu erkennen.
- Dokumentiere Deinen Code mit Kommentaren, damit Du später leichter nachvollziehen kannst, was jeder Abschnitt bewirken soll.
- Nutze Error Handling in VBA, um unerwartete Fehler abzufangen und zu behandeln.
FAQ: Häufige Fragen
1. Wie kann ich nur bestimmte Tabellennamen auslesen?
Du kannst die Bedingung in der If
-Anweisung anpassen, um nur bestimmte Muster zu berücksichtigen.
2. Was passiert, wenn ich mehr als 10 Tabellen mit "I" habe?
Der Code stoppt, wenn startRow
größer als 85 ist. Du kannst die Bedingung anpassen, um mehr Tabellennamen zu erfassen.
3. Funktioniert das auch in älteren Excel-Versionen?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren. Achte darauf, dass Du VBA aktiviert hast.