Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellennamen auslesen und in Tabelle schreiben

Tabellennamen auslesen und in Tabelle schreiben
02.02.2018 12:09:29
Gunnar
Hallo Zusammen,
ich möchte alle Tabellennamen, die mit einem "I" beginnen per vba auslesen und in einen bestimmten Zellbereich des aktiven Worksheets schreiben lassen. Dazu habe ich folgenden Code gebastelt, der aber bei set StartRow = 78 nach einem Objekt fragt.
Sub TabellenNamen()
If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
"Frage") = vbYes Then GoTo Fortfahren Else GoTo EndeMakro
Fortfahren:
Dim ws As Worksheet
Dim i As Integer
Dim StartRow As Integer
Set StartRow = 78
For i = 1 To Worksheets.Count
If Left(ws.Name, 1) = "I" Then i = i + 1
If StartRow > 87 Then
Exit For
Else
ActiveSheet.Cells(StartRow, 19).Value = ws.Name
End If
End If
Next i
EndeMakro:
End Sub
Kann mir jemand weiterhelfen?
Danke & Gruß, Gunnar
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ohne Set. owT
02.02.2018 12:17:57
Rudi
AW: ohne Set. owT
02.02.2018 14:25:14
Gunnar
Hallo Rudi,
danke für den Tipp. Soweit klappt es jetzt schon mal.
Jetzt hängt er sich aber an dem zweiten "End If" auf und sagt "End If ohne If-Block".
Hast du da vielleicht auch noch 'ne Idee.
Danke & Gruß, Gunnar
AW: Tabellennamen auslesen und in Tabelle schreiben
02.02.2018 14:37:50
EtoPHG
Hallo Gunnar,
Korrigiere:
If Left(ws.Name, 1) = "I" Then
i = i + 1
Dann funktionierts.
Gruess Hansueli
Anzeige
AW: Tabellennamen auslesen und in Tabelle schreiben
02.02.2018 16:24:18
Gunnar
Hallo Hansueli,
danke für den Hinweis. Der gesamte Code sieht mittlerweile so aus:
Sub TabellenNamen()
If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
"Frage") = vbYes Then GoTo Fortfahren Else GoTo EndeMakro
Fortfahren:
Dim ws As Worksheet
Dim i As Integer
Dim StartRow As Integer
StartRow = 78
For i = 1 To Worksheets.Count
If Left(ws.Name, 1) = "I" Then
i = i + 1
If StartRow > 87 Then
Exit For
Else
ActiveSheet.Cells(StartRow, 19).Value = ws.Name
End If
End If
Next i
EndeMakro:
End Sub
Er öffnet die MsgBox und hängt sich dann aber leider immer noch auf. Fehlermeldung "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt."
Was mach ich falsch?
Danke & Gruß, Gunnar
Anzeige
AW: Tabellennamen auslesen und in Tabelle schreiben
02.02.2018 17:02:08
Werner
Hallo Gunnar,
so:
Public Sub aaa()
Dim startRow As Long
startRow = 78
If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
"Frage") = vbYes Then
For Each Worksheet In ThisWorkbook.Worksheets
If startRow > 85 Then Exit For
If Left(Worksheet.Name, 1) = "I" Then
Cells(startRow, 19).Value = Worksheet.Name
startRow = startRow + 1
End If
Next Worksheet
End If
End Sub
Im Makro prüfst du startRow auf größer 85. Dieser Fall wird aber nie eintreffen, da du startRow mit 78 belegst und innerhalb des Makros der Wert von startRow nicht verändert wird.
Erklär doch mal, was du genau damit erreichen willst.
Gruß Werner
Anzeige
AW: Tabellennamen auslesen und in Tabelle schreiben
05.02.2018 10:58:14
Gunnar
Hallo Werner,
danke für die Antwort. Dein Hinweis bzgl. "startRow > 87" ist korrekt und kann natürlich nicht erreicht werden. Ich habe in der Datei maximal 10 Blätter, die mit "I" beginnen - das wollte ich damit eingrenzen (brauche ich wahrscheinlich ja aber nicht, weil er nach dem 10. ohnehin keins mehr findet - oder?
Das Makro an sich soll bewirken, dass die Namen aller Immobilienblätter, die mit "I" beginnen in dem aktiven Tabellenblatt im Zellbereich "S78:S87 bzw. cells.(startRow, 19)" der Reihe nach aufgelistet werden.
Deinen Code habe ich auch ausprobiert - der hängt sich in der Zeile "For Each Worksheet In ThisWorkbook.Worksheets" mit der Fehlermeldung "Fehler beim Kompilieren: Variable nicht definiert" auf. Verstehe ich nicht, weil Worksheet doch nicht nochmal extra zu deklarieren ist?
Wäre super, wenn du das nochmal anschauen könntest.
Danke & Gruß, Gunnar
Anzeige
AW: Tabellennamen auslesen und in Tabelle schreiben
05.02.2018 12:50:07
Werner
Hallo Gunnar,
dann hast du Option Explicit drin. Dann muss die Variable deklariert werden. Dann aber bitte nicht Worksheet als Variablenname, Worksheet ist ein VBA-Schlüsselwort und sollte dann nicht als Variablenname benutzt werden.
Option Explicit
Public Sub aaa()
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
Gruß Werner
Anzeige
AW: Tabellennamen auslesen und in Tabelle schreiben
05.02.2018 13:18:02
Gunnar
Hallo Werner,
tausend Dank, jetzt klappt's.
Viele Grüße
Gunnar
Gerne u. Danke für die Rückmeldung. o.w.T.
05.02.2018 13:20:36
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

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:

  1. Variable deklarieren: Die Option Explicit Anweisung zwingt Dich dazu, alle Variablen zu deklarieren.
  2. Startzeile festlegen: Mit startRow = 78 legst Du die Zeile fest, ab der die Tabellennamen eingetragen werden.
  3. MsgBox zur Bestätigung: Die MsgBox fragt, ob das Makro gestartet werden soll.
  4. Durch alle Worksheets iterieren: Mit For Each ws In ThisWorkbook.Worksheets durchläufst Du alle Arbeitsblätter.
  5. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige