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

VBA Schleife für variable Anzahl der Blätter

Forumthread: VBA Schleife für variable Anzahl der Blätter

VBA Schleife für variable Anzahl der Blätter
28.05.2013 10:21:02
MR
Hallo zusammen,
habe folgendes Problem und bin mir nicht sicher ob dies überhaupt möglich ist. Ich habe eine Arbeitsmappe mit mehreren Tabellenblätter. Diese sind wie folgt bezeichnet:
A
B
C
Start
1
2
3
...
Ende
D
E
F
Die Tabellenblätteranzahl zwischen dem Blatt Start und dem Blatt Ende ist variabel, d.h. es können noch mehr Blätter eingefügt werden. Nun möchte ich über eine VBA Schleife alle Tabellenblätter zwischen dem Blatt Start und dem Blatt Ende ansprechen.
Neue Blätter befinden sich immer zwischen diesen beiden Blättern.
Ich bedanke mich schonmal für die Hilfe!!

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleife für variable Anzahl der Blätter
28.05.2013 10:28:15
EtoPHG
Hallo MR (wurdest du nicht getauft?)
Und wie willst du die Blätter ansprechen? Mündlich, schriftlich, französisch oder spanisch? ,-)
Schau dir das For Each Konstrukt in der VBA Hilfe an.
Teste die Worksheet-Namen auf rein numerischen Inhalt, z.B. so If CStr(Val(ws.Name)) = wsName Then
Gruess Hansueli

Anzeige
AW: VBA Schleife für variable Anzahl der Blätter
28.05.2013 10:48:35
MR
Hallo Hansueli,
möchte den Bereich wie folgt "ansprechen" - hier werden jedoch alle Tabellenblätter berücksichtigt:
Sub kopieren()
Dim Blatt As Worksheet, lrow As Long
For Each Blatt In ActiveWorkbook.Worksheets
lrow = ZIELBLATT.UsedRange.Rows.Count
Blatt.Rows("118:124").Copy ZIELBLATT.Rows(lrow + 1).Resize()
Next Blatt
End Sub

Grüße,
Stefan

Anzeige
AW: VBA Schleife für variable Anzahl der Blätter
28.05.2013 10:59:55
EtoPHG
Hallo Stefan,
Deine Angaben sind völlig ungenügend.
WIE HEISST das Quellblatt?
WIE wird das Zielblatt bestimmt?
Welche Spalte im Zielblatt enthält Daten für die Bestimmung der nächsten freien Zeile?
Gruess Hansueli

AW: VBA Schleife für variable Anzahl der Blätter
28.05.2013 11:02:19
MR
Hallo Hansueli,
Problem ist schon gelöst - Danke für die Hilfe und Tipps!
Stefan

Anzeige
frag den Index der Blätter ab
28.05.2013 10:42:26
Matthias
Hallo
Ich bin davon ausgegangen das Start immer vor Ende liegt!
Option Explicit
Sub ml()
Dim idx1 As Long
Dim idx2 As Long
Dim x As Long
idx1 = Worksheets("Start").Index
idx2 = Worksheets("Ende").Index
MsgBox "Blätter ansprechen von " & idx1 & " bis " & idx2
For x = idx1 To idx2
Worksheets(x).Activate
MsgBox "Hier ist Blatt " & x & " :-)"
Next
End Sub
Im Bsp wird das Blatt aktiviert und eine Info ausgegeben
Willst Du die Blätter Start und Ende nicht mit dabei haben
musst Du entsprechend die Schleife so ändern:
Option Explicit
Sub ml()
Dim idx1 As Long
Dim idx2 As Long
Dim x As Long
idx1 = Worksheets("Start").Index
idx2 = Worksheets("Ende").Index
MsgBox "Blätter ansprechen von " & idx1 + 1 & " bis " & idx2 - 1
For x = idx1 + 1 To idx2 - 1
Worksheets(x).Activate
MsgBox "Hier ist Blatt " & x & " :-)"
Next
End Sub
Gruß Matthias

Anzeige
AW: frag den Index der Blätter ab
28.05.2013 10:57:25
MR
@MAtthias: DANKE! hat geklappt!!!
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Schleife für variable Anzahl der Blätter


Schritt-für-Schritt-Anleitung

Um eine VBA Schleife zu erstellen, die eine variable Anzahl von Blättern zwischen den Blättern "Start" und "Ende" anspricht, folge diesen Schritten:

  1. Öffne deine Excel-Arbeitsmappe und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject (dein Arbeitsmappenname)" klickst und "Einfügen" > "Modul" auswählst.

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Sub ml()
       Dim idx1 As Long
       Dim idx2 As Long
       Dim x As Long
    
       idx1 = Worksheets("Start").Index
       idx2 = Worksheets("Ende").Index
    
       For x = idx1 + 1 To idx2 - 1
           Worksheets(x).Activate
           MsgBox "Hier ist Blatt " & x & " :-)"
       Next x
    End Sub
  4. Schließe den VBA-Editor und führe das Makro über ALT + F8 aus, indem du "ml" auswählst und auf "Ausführen" klickst.


Häufige Fehler und Lösungen

  • Fehler: "Sub oder Funktion nicht definiert"

    • Stelle sicher, dass der Code in einem Modul und nicht in einem Arbeitsblatt oder einer anderen Struktur ist.
  • Fehler: "Blatt nicht gefunden"

    • Überprüfe die Schreibweise der Blattnamen ("Start" und "Ende"). Sie müssen exakt übereinstimmen.
  • Lösung für leere Blätter

    • Falls du leere Blätter hast, die nicht angesprochen werden sollen, kannst du die Schleife so anpassen, dass sie nur die gewünschten Blätter durchläuft.

Alternative Methoden

Eine alternative Möglichkeit zur Ansteuerung der Blätter ist die Verwendung von For Each. Hier ein Beispiel:

Sub Kopieren()
    Dim Blatt As Worksheet
    Dim Zielblatt As Worksheet
    Set Zielblatt = Worksheets("Ziel")
    Dim lrow As Long

    For Each Blatt In Worksheets
        If Blatt.Index > Worksheets("Start").Index And Blatt.Index < Worksheets("Ende").Index Then
            lrow = Zielblatt.UsedRange.Rows.Count
            Blatt.Rows("118:124").Copy Zielblatt.Rows(lrow + 1).Resize()
        End If
    Next Blatt
End Sub

Diese Methode ermöglicht dir, alle Blätter zwischen "Start" und "Ende" zu kopieren, ohne deren Namen explizit anzugeben.


Praktische Beispiele

  1. Alle Blätter aktivieren und anzeigen:

    Sub ZeigeAlleBlaetter()
       Dim Blatt As Worksheet
       For Each Blatt In Worksheets
           MsgBox "Aktiviere Blatt: " & Blatt.Name
           Blatt.Activate
       Next Blatt
    End Sub
  2. Daten von jedem Blatt sammeln:

    Sub DatenSammeln()
       Dim Blatt As Worksheet
       Dim Zielblatt As Worksheet
       Set Zielblatt = Worksheets("Ziel")
       Dim lrow As Long
       lrow = 1
    
       For Each Blatt In Worksheets
           If Blatt.Index > Worksheets("Start").Index And Blatt.Index < Worksheets("Ende").Index Then
               Blatt.Range("A1").Copy Zielblatt.Cells(lrow, 1)
               lrow = lrow + 1
           End If
       Next Blatt
    End Sub

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Codes, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.
  • Verwende MsgBox nur zum Debuggen. Für produktiven Code sind Kommentare und Protokollierungsfunktionen besser geeignet.
  • Denke daran, deine Makros regelmäßig zu speichern und Backups deiner Arbeitsmappe zu erstellen, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich die Schleife anpassen, um nur bestimmte Blattnamen zu berücksichtigen?
Ja, du kannst eine If-Bedingung verwenden, um die gewünschten Blattnamen zu filtern.

2. Wie finde ich die Anzahl der Blätter zwischen "Start" und "Ende"?
Du kannst einfach idx2 - idx1 - 1 verwenden, um die Anzahl der Blätter zu berechnen, die zwischen den beiden Blättern liegen.

3. Ist dieser Code in jeder Excel-Version anwendbar?
Ja, der Code sollte in allen modernen Excel-Versionen (Excel 2010 und höher) funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige