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

Forumthread: For Each Schleife mit einer Ausnahme

For Each Schleife mit einer Ausnahme
25.06.2017 10:29:10
irwitzer
Hallo zusammen,
ich habe einige For Each Schleifen gebaut die mir die Druckbereiche, Seitenumbrüche und ähnliches und allen Tabellen des Workbook einstellen. Und es funktioniert, unter anderem auch dank diesem Forum großartig, vielen Dank dafür.
Ich habe ein Problem in all diesen For Each Schleifen soll immer die erste Tabelle ausgelassen werden die schleife soll durchlaufen aber das erste Tabellenblatt unberührt lassen.
Es können zwar unterschiedlich viele Tabellenblätter in meinen Workbooks sein aber es ist immer die Erste Position / erste Tabellenblatt was ausgelassen werden soll, und ich hätte auch die Möglichkeit einen TEIL des Namens des ersten Tabellenblatt immer gleich zu definieren z.B. Deckblat+XY-Bad+XYTag.
Ich bin mit GoTo und Filter so wie auch mit der if Funktionen nicht erfolgreich gewesen es muss an mir liegen. Ich würde mich über eine Lösung freuen, Danke.
Beispiel:
Sub SET_Druckbereich()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$J$38"
Next ws
End Sub

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Each Schleife mit einer Ausnahme
25.06.2017 10:35:34
Hajo_Zi

Option Explicit
Sub n()
Dim LoI As Long
For LoI = 2 To Worksheets.Count
MsgBox Worksheets(LoI).Name
Next LoI
End Sub


AW: For Each Schleife mit einer Ausnahme
25.06.2017 10:41:32
Werner
Hallo,
oder über den Namen, dann ist die Postition des Blattes egal.
Sub SET_Druckbereich()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name Like "Deckblatt*" Then
'nix machen
Else
ws.PageSetup.PrintArea = "$A$1:$J$38"
End If
Next ws
End Sub
Gruß Werner
Anzeige
AW: For Each Schleife mit einer Ausnahme
25.06.2017 10:55:49
irwitzer
Vielen Dank Werner,
ich sehe jetzt was ich bei der If Funktion falsch gemacht habe dein Code funktioniert! Vielen Dank. Ich probiere jetzt ob ich in die selbe Schleife an stelle von Else für den If Case auch einen Befehl wie z.B. eben eigener/abweichender Druckbereich für ws.NAME Like "Deckblatt*" ausführen lassen kann, aber meine gestellte Frage ist beantwortet und ich habe verstanden. Danke!
Anzeige
AW: For Each Schleife mit einer Ausnahme
25.06.2017 10:57:30
Hajo_Zi
warun Offen, Du willst doch was machen? Ich habe nicht gelesen das jemamnd vorbei kommen soll. Ich habe auch nicht gelesen was offen.
Gruß Hajo
Gerne u.Danke für die Rückmeldung.
25.06.2017 11:02:43
Werner
Hallo,
das ist doch kein Problem. Einfach da wo ich im Code nix machen drin stehen habe den Druckbereich definieren.
Übrigens, wenn ein Problem gelöst ist bitte nicht den Haken bei offen setzen, dann wird der Beitrag als offen also ungelöst markiert.
Gruss Werner
Anzeige
AW: For Each Schleife mit einer Ausnahme
25.06.2017 11:17:33
irwitzer
Es ist alles beantworte Danke euch allen ist der Tread damit jetzt geschlossen oder immer noch nicht?
AW: For Each Schleife mit einer Ausnahme
25.06.2017 10:56:27
Nepumuk
Hallo,
wenn's immer die 1. Tabelle ist, dann so:
Public Sub SET_Druckbereich()
    Dim ws As Worksheet
    For Each ws In Worksheets
        If ws.Index > 1 Then ws.PageSetup.PrintArea = "$A$1:$J$38"
    Next ws
End Sub

Gruß
Nepumuk
Anzeige
AW: For Each Schleife mit einer Ausnahme
25.06.2017 11:05:37
irwitzer
Perfekt Funktioniert auch Danke Nepumuk, jetzt habe ich beide Varianten zur Auswahl:
nach Namen und nach Position.
Und mein Select Befehl war wohl überflüssig. Danke für die Hilfe!
LG irwitzer
AW: For Each Schleife mit einer Ausnahme
25.06.2017 11:07:06
Hajo_Zi
ich kann gern mich wiederholen
warun Offen, Du willst doch was machen?
Ich habe nicht gelesen das jemamnd vorbei kommen soll.
Ich habe auch nicht gelesen was offen.
Gruß Hajo
Anzeige
AW: For Each Schleife mit einer Ausnahme
25.06.2017 11:11:28
irwitzer
...
AW: For Each Schleife mit einer Ausnahme
25.06.2017 11:14:03
Hajo_Zi
auch in dem Beitrag konnte ich nichts finden für offen. Wir können das ruhig weiter machen.
Gruß Hajo
Ist doch erledigt
25.06.2017 11:16:25
Werner
Hallo,
lies doch bitte mal den Text neben dem Kontrollkästchen, das du andauern anwählst, bitte mal genau durch.
Gruß Werner
Anzeige
AW: Ist doch erledigt
25.06.2017 11:18:49
irwitzer
Ja hat sich jetzt erledigt hoffe ich danke.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

For Each Schleife in Excel VBA: Mit Ausnahme von Tabellen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu:
    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)".
    • Wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub SET_Druckbereich()
       Dim ws As Worksheet
       For Each ws In Worksheets
           If ws.Index > 1 Then
               ws.PageSetup.PrintArea = "$A$1:$J$38"
           End If
       Next ws
    End Sub
    • Dieser Code überspringt das erste Arbeitsblatt und setzt den Druckbereich für alle anderen.

Häufige Fehler und Lösungen

  • Fehler: „Objektvariable oder mit Blockvariable nicht festgelegt“

    • Lösung: Stelle sicher, dass der Name des Worksheets korrekt ist und das Arbeitsblatt existiert.
  • Fehler: Druckbereich wird nicht gesetzt

    • Lösung: Überprüfe, ob die Bedingung in der If-Anweisung korrekt ist. Zum Beispiel, überprüfe, ob du ws.Index > 1 verwendest, um das erste Blatt auszuschließen.

Alternative Methoden

  • Verwenden der Like-Anweisung:

    • Wenn du nur bestimmte Arbeitsblätter basierend auf ihrem Namen bearbeiten möchtest, kannst du die Like-Anweisung verwenden:
    Sub SET_Druckbereich()
       Dim ws As Worksheet
       For Each ws In Worksheets
           If ws.Name Like "Deckblatt*" Then
               'Nichts tun
           Else
               ws.PageSetup.PrintArea = "$A$1:$J$38"
           End If
       Next ws
    End Sub
  • VBA For Each Schleife über alle Blätter:

    • Du kannst auch eine einfache Schleife mit For verwenden, um mehr Kontrolle zu haben:
    Sub SET_Druckbereich()
       Dim i As Long
       For i = 2 To Worksheets.Count
           Worksheets(i).PageSetup.PrintArea = "$A$1:$J$38"
       Next i
    End Sub

Praktische Beispiele

  • Beispiel 1: Druckbereich für alle Blätter außer dem ersten setzen

    Sub SET_Druckbereich()
       Dim ws As Worksheet
       For Each ws In Worksheets
           If ws.Index > 1 Then
               ws.PageSetup.PrintArea = "$A$1:$J$38"
           End If
       Next ws
    End Sub
  • Beispiel 2: Bedingte Formatierung für bestimmte Blätter

    Sub FormatSheets()
       Dim ws As Worksheet
       For Each ws In Worksheets
           If ws.Name Like "Deckblatt*" Then
               ' Formatierungen für das Deckblatt
           Else
               ' Andere Formatierungen
           End If
       Next ws
    End Sub

Tipps für Profis

  • Vermeide die Verwendung von Select:

    • In VBA ist es oft besser, direkt auf Objekte zuzugreifen, anstatt sie auszuwählen. So wird der Code schneller und stabiler.
  • Nutze Option Explicit:

    • Füge am Anfang deines Moduls Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Das hilft, Fehler zu vermeiden.
  • Verwende Fehlerbehandlung:

    • Implementiere On Error Resume Next und On Error GoTo für eine bessere Fehlerverwaltung.

FAQ: Häufige Fragen

1. Wie kann ich die erste Tabelle in einer For Each Schleife ignorieren? Du kannst die Indexnummer des Worksheets überprüfen, wie in den Beispielen oben gezeigt (If ws.Index > 1).

2. Was ist der Unterschied zwischen For Each und For in VBA? For Each wird verwendet, um durch Objekte in einer Sammlung zu iterieren, während For eine Schleife mit einer definierten Anzahl durchläuft.

3. Kann ich mehrere Bedingungen in einer For Each Schleife verwenden? Ja, du kannst mehrere Bedingungen in deinen If-Anweisungen kombinieren, um spezifischere Logik zu implementieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige