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

For each Blatt in worksheets

Forumthread: For each Blatt in worksheets

For each Blatt in worksheets
14.10.2003 14:46:06
lotharP
Hallo Leute,

hab' jetzt endlich nochmal sowas gefunden mit einer For each Schleife.
Grundsätzlich mach ich das immer mit einer while Schleife wollte aber mit aller Gewalt das hier haben weil ich das besser finde:


Sub allini()
Dim blatt
For Each blatt In ActiveWorkbook.Worksheets
filteran
Range("a2:i65536").Delete
Next
End Sub




Sub filteran()
With Worksheets("PLAN")
If .AutoFilterMode Then
Range("a2").AutoFilter
End If
End With
End Sub


So is ja schön, er macht das auch brav, allerdings dann nicht für jedes Blatt sondern nur für's Blatt PLAN.
Ja is schon klar, dann darf da auch nicht PLAN angesprochen werden, aber alle Versuche waren(mal wieder) vergebens!!

Danke i.V.

Gruß

Lothar
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: For each Blatt in worksheets
14.10.2003 14:49:38
Andi_H
Hi Lothar,
so dürfte es klappen:


Sub allini()
Dim blatt
For Each blatt In ActiveWorkbook.Worksheets
filteran
blatt.Range("a2:i65536").Delete
Next
End Sub


gruß

andi
AW: For each Blatt in worksheets
14.10.2003 15:15:12
LotharP
Hallo Andi,

das wars zwar nicht ganz, weil ja auch noch in den anderen Blättern geprüft werden muß ob der Filter an ist oder nicht. Aber im ersten Step hätte mir das auf jeden Fall geholfen!! DANKE DIR!

Die nächste Antwort ist aber schon komplett und hilft mir schon weiter.(INGO)

Gruß

Lothar
Anzeige
parameterliste
14.10.2003 14:54:47
IngoG
Hallo Lothar,
ganz klar ist mir nicht, was Du machen möchtest, aber hast Du mal über einen parameter nachgedacht?


Sub allini()
Dim blatt
For Each blatt In ActiveWorkbook.Worksheets
filteran(blatt.name)
Range("a2:i65536").Delete
Next
End Sub



Sub filteran(ws_name as string)
With Worksheets(ws_name)
If .AutoFilterMode Then
Range("a2").AutoFilter
End If
End With
End Sub


habs zwar nicht testen können sollte aber funzen
Gruß Ingo
Anzeige
AW: parameterliste
14.10.2003 15:12:08
LotharP
Hallo Ingo,

exact das isses!
Allerdings hätt ich mir da auch nen Wolf probieren können weil ich die Zusammenhänge da nich so ganz verstehe?!
Gut das er Blatt aus irgendeinem Grund als Objekt erkennt hatte ich ja irgendwie schon raus. Das ich jedes einzelne Blatt dann "auslesen" kann und den Namen bekomme is auch noch O.K., kann man hinkommen!
ABER DANN, oh-no, da verlässt mich dann mein Verständnis vollends!
Gut, ich hab's jetzt so hingenommen, werde auch versuchen es mir zu merken, aber es zu verstehen lass ich mir noch'n bisschen Zeit(GEZWUNGENERMASSEN! ;-) ).
Aber ich wollts ja unbedingt wissen!
Allerdings,vieleicht hast du ja noch ein wenig Zeit mir's kurz zu erklären, und mich aus dem Dunkel der Unwissenheit herauszuholen? Wär jedenfalls recht nett, weil ich's immer noch ziemlich gut finde!

Wenn nicht, ist es auch nicht so tragisch, dann weich ich wahrscheinlich doch auf for i to aus.

Gruß

Lothar
Anzeige
AW: For each Blatt in worksheets
14.10.2003 14:56:45
Hajo_Zi
Hallo Lothar

warum Du das in zwei

Sub machts ist mir schleierhaft,  es macht es nur kompliziert.
mal ungetestet.

Sub allini()
Dim Blatt  As Worksheet
For Each Blatt In ActiveWorkbook.Worksheets
filteran Blatt
Next
End Sub



Sub filteran(Lothar As Worksheet)
With Lothar
If .AutoFilterMode Then
.Range("a2").AutoFilter
.Range("a2:i65536").Delete
End If
End With
End Sub



Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

http://home.media-n.de/ziplies/

Anzeige
AW: For each Blatt in worksheets
14.10.2003 15:21:22
LotharP
Hallo Hajo,

ich versuche (stell mir da wahrscheinlich auch immer selbst'n Bein) möglichst modular zu programmieren. Heisst, ich möchte bestimmet Dinge dann auch als einzelne Makros "aufrufbar" haben, Mappen-unabhängig sozusagen.
Deine Version werde ich gleich auch nochmal probieren, Dank dir auf jeden Fall!

Ich bin auf jeden Fall für Hinweise in der Art dankbar, da ich manchmal denke ich ein wenig unorthodox an die Dinge rangehe und entsprechende Hinweise/Verbesserungen gerne entgegennehme!

Gruß

Lothar
Anzeige
;

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

Infobox / Tutorial

For Each Blatt in Worksheets: VBA-Anleitung


Schritt-für-Schritt-Anleitung

Um eine For Each-Schleife in VBA zu verwenden, die durch alle Blätter in einem Arbeitsbuch iteriert, kannst Du folgenden Code verwenden:

Sub allini()
    Dim blatt As Worksheet
    For Each blatt In ActiveWorkbook.Worksheets
        filteran blatt.Name
        blatt.Range("A2:I65536").Delete
    Next blatt
End Sub

Sub filteran(ws_name As String)
    With Worksheets(ws_name)
        If .AutoFilterMode Then
            .Range("A2").AutoFilter
        End If
    End With
End Sub

In diesem Beispiel wird für jedes Blatt in ActiveWorkbook.Worksheets die Subroutine filteran aufgerufen, um zu überprüfen, ob der AutoFilter aktiv ist. Anschließend wird der Bereich von A2:I65536 gelöscht.


Häufige Fehler und Lösungen

  1. Problem: Der Code funktioniert nur für ein bestimmtes Blatt. Lösung: Stelle sicher, dass Du das Blattobjekt korrekt an die Funktion filteran übergibst. Verwende blatt anstelle von einem festen Blattname wie "PLAN".

  2. Problem: Fehler beim Löschen des Bereichs. Lösung: Stelle sicher, dass der Bereich, den Du löschen möchtest, existiert. Wenn Du mit leeren Blättern arbeitest, kann es sein, dass der Bereich nicht vorhanden ist.

  3. Problem: AutoFilter wird nicht entfernt. Lösung: Überprüfe, ob der AutoFilter tatsächlich aktiv ist, bevor Du versuchst, ihn zu entfernen oder zu löschen.


Alternative Methoden

Du kannst auch die For i = 1 To Worksheets.Count-Schleife verwenden, wenn Du auf die Blätter in einer bestimmten Reihenfolge zugreifen möchtest. Hier ein Beispiel:

Sub allini()
    Dim i As Integer
    For i = 1 To ActiveWorkbook.Worksheets.Count
        filteran ActiveWorkbook.Worksheets(i).Name
        ActiveWorkbook.Worksheets(i).Range("A2:I65536").Delete
    Next i
End Sub

Diese Methode ist besonders nützlich, wenn Du die Schleife über die Indizes der Blätter steuern möchtest.


Praktische Beispiele

Hier ist ein Beispiel, das die Verwendung einer For Each-Schleife demonstriert, um bestimmte Operationen auf jedem Blatt durchzuführen:

Sub formatAllSheets()
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Cells.Font.Size = 12
        ws.Cells.Font.Name = "Arial"
    Next ws
End Sub

In diesem Beispiel wird die Schriftgröße und der Schriftart für alle Blätter im aktiven Arbeitsbuch geändert.


Tipps für Profis

  • Mit ThisWorkbook arbeiten: Verwende ThisWorkbook.Worksheets, um sicherzustellen, dass Du nur die Blätter im aktuellen Arbeitsbuch bearbeitest, auch wenn ein anderes Arbeitsbuch aktiv ist.

  • Fehlerbehandlung einfügen: Verwende On Error Resume Next, um sicherzustellen, dass Dein Code bei einem Fehler nicht abbricht und stattdessen die nächsten Schritte ausführt.

  • Leistungsoptimierung: Wenn Du viele Blätter bearbeitest, kann es sinnvoll sein, Application.ScreenUpdating = False am Anfang und Application.ScreenUpdating = True am Ende Deiner Subroutine zu verwenden, um die Leistung zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich nur bestimmte Blätter in der Schleife ansprechen?
Du kannst eine Bedingung einfügen, um nur bestimmte Blätter zu filtern, zum Beispiel:

If blatt.Name <> "Sheet1" Then
    ' Deine Logik hier
End If

2. Was ist der Unterschied zwischen Worksheets und Sheets in VBA?
Worksheets referenziert nur die Arbeitsblätter, während Sheets sowohl Arbeitsblätter als auch Diagrammblätter umfasst. Wenn Du nur mit Arbeitsblättern arbeiten möchtest, verwende Worksheets.

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