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

Forumthread: Vorzeitig aus einer For-Schleife springen?

Vorzeitig aus einer For-Schleife springen?
10.06.2016 19:56:01
Noureddine
Hallo zusammen,
wie kann ich hier von der For-Schleife vorzeitig austreten und das Makro weiter durchführen.
Also, sobald er das ELSE erreicht und ein neues Tabellenblatt erstellt + unbenennen, möchte ich aus der Schleife raus.
Könnt hier mir hierbei helfen?
Vielen Dank vorab.
Mien Ansatz sieht so aus:

Sub Makro1()
' Makro1 Makro
Dim i As Integer
Dim Abfrage As Byte
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "DATEN" Then
Abfrage = MsgBox("Tabellenblatt existiert bereits. Anlegen, mit dem Namen " & "DATEN " & _
Worksheets.Count & "?", 1, "Hinweis")
If Abfrage = 1 Then
Sheets.Add , Worksheets(Worksheets.Count)
ActiveSheet.Name = "DATEN " & Worksheets.Count
End If
Else
Sheets.Add , Worksheets(Worksheets.Count)
ActiveSheet.Name = "DATEN " & Worksheets.Count
End If
Next
End Sub

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
10.06.2016 19:59:10
Hajo_Zi
Exit For

AW: Vorzeitig aus einer For-Schleife springen?
10.06.2016 20:16:00
Noureddine
Hallo Hajo_Zi,
danke für die schnelle Antwort.
Ich habs jetzt eingesetzt. Aber es funktoniert nicht wie geplant!
Mein Ziel:
Erstell ein Tabellenblatt und benennen ihn um (txtMonat & txtJahr & " Daten"). Wenn dieser bereits vorhanden ist - Abfragen, ob ein neues Tabellenblatt erstellt werden soll mit den Namen
(txtMonat & txtJahr & " Daten" & "(++)").
Kannst du mir dabei helfen und mir sagen wo der Fehler liegt?
Danke nochmals.

Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
10.06.2016 20:23:23
Hajo_Zi
ich habe auf den Beitrag geantwortet und da Stand nach Else verlassen.
Gruß Hajo

AW: Vorzeitig aus einer For-Schleife springen?
10.06.2016 23:20:09
MatthiasG
Hallo Noureddine,
ohne genaue Prüfung:
schau mal ob der Schleifenzähler trotz Exit For noch eins hochzählt, dann musst du vorher denselben um 1 erniedrigen.
Gruß Matthias

Anzeige
AW: Stimmt, dass passiert nur, wenn...
11.06.2016 11:56:14
MatthiasG
... man die Schleife zu Ende laufen lässt:

Sub test()
Dim a As Integer
For a = 1 To 10
Next
Debug.Print a
End Sub

Ausgabe: 11
Gruß Matthias

Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
11.06.2016 14:06:15
mpb
Hallo,
ungetestet:
Sub Makro1()
' Makro1 Makro
Dim x As Integer
Dim i As Integer
Dim Abfrage As Byte
x = Worksheets.Count
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "DATEN" Then
Abfrage = MsgBox("Tabellenblatt existiert bereits. Anlegen, mit dem Namen " & " _
DATEN " & _
Worksheets.Count & "?", 1, "Hinweis")
If Abfrage = 1 Then
Sheets.Add , Worksheets(Worksheets.Count)
ActiveSheet.Name = "DATEN " & Worksheets.Count
End If
Else
Sheets.Add , Worksheets(Worksheets.Count)
ActiveSheet.Name = "DATEN " & Worksheets.Count
End If
If x 

Gruß
Martin

Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
11.06.2016 14:52:05
mpb
Hallo,
noch eine Alternative, um ohne Schleife festzustellen, ob es eine Tabelle schon gibt:
Sub Blattname()
On Error Resume Next
Worksheets("Daten").Activate
If Err.numer = 9 Then
MsgBox "Tabelle vorhanden"
Else
MsgBox "Tabelle nicht vorhanden"
End If
End Sub
Gruß
Martin

Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
11.06.2016 15:11:37
Daniel
Im Prinzip ne gute Idee, hier mal der korrekte Code:
Sub Blattname()
On Error Resume Next
Worksheets("Daten").Activate
If Err.Number = 0 Then
MsgBox "Tabelle vorhanden"
Else
MsgBox "Tabelle nicht vorhanden"
End If
End Sub

wenn du versuchst das Blatt zu aktivieren, wird nicht der Fehler 9 ausgegeben, sondern der Fehler 1004 weil das Aktivieren fehlschlägt und dieser Fehler wohl Vorrang vor dem Fehler 9 hat.
Fehler 9 entsteht bspw bei Set wsh = Worksheets("Daten")
(was hier auch vorzuziehen wäre, wenn man Bildschirmflackern vermeiden will)
Gruß Daniel

Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
12.06.2016 10:27:33
mpb
Hallo Daniel,
bei mir kam Fehler 9.
Gruß
Mrtin

AW: Vorzeitig aus einer For-Schleife springen?
11.06.2016 14:24:10
Daniel
Hi
also ich würde die Schleife komplett durchlaufen lassen und dabei mitzählen, wieviele Blätter mit "Daten" du schon hast um dann einen passenden Namen vergeben zu können.
Sub Blatt_Einfügen()
Dim i As Long
Dim Zähler As Long
For i = 1 To ActiveWorkbook.Sheets.Count
If Sheets(i).Name Like "Daten*" Then Zähler = Zähler + 1
Next
If Zähler = 0 Then
Worksheets.Add after:=Sheets(i - 1)
ActiveSheet.Name = "Daten"
Else
Select Case MsgBox("Es besteht bereits ein oder mehrere Datenblätter." & vbLf & _
"Trotzdem neu anlegen als ""Daten " & Zähler + 1 & """?", vbQuestion +  _
vbYesNo)
Case vbYes
Worksheets.Add after:=Sheets(i - 1)
ActiveSheet.Name = "Daten " & Zähler + 1
Case Else
End Select
End If
End Sub

Gruß Daniel

Anzeige
AW: Vorzeitig aus einer For-Schleife springen?
11.06.2016 16:01:19
Noureddine
Danke Daniel, genau so etwas habe ich gesucht.
Und auch an die anderen, Vielen Dank!
Anzeige
Anzeige

Infobox / Tutorial

Vorzeitig aus einer For-Schleife in Excel VBA springen


Schritt-für-Schritt-Anleitung

Um vorzeitig aus einer For-Schleife in Excel VBA auszutreten, kannst du den Befehl Exit For verwenden. Hier ist ein einfaches Beispiel:

Sub Makro1()
    Dim i As Integer
    Dim Abfrage As Byte
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "DATEN" Then
            Abfrage = MsgBox("Tabellenblatt existiert bereits. Anlegen, mit dem Namen " & "DATEN " & Worksheets.Count & "?", vbYesNo, "Hinweis")
            If Abfrage = vbYes Then
                Sheets.Add , Worksheets(Worksheets.Count)
                ActiveSheet.Name = "DATEN " & Worksheets.Count
            End If
            Exit For ' Vorzeitiger Ausstieg aus der Schleife
        End If
    Next i
End Sub

In diesem Beispiel wird die Schleife vorzeitig beendet, wenn das Tabellenblatt "DATEN" gefunden wird.


Häufige Fehler und Lösungen

  • Fehler: Die Schleife zählt trotz Exit For weiter hoch.

    • Lösung: Stelle sicher, dass das Exit For in der richtigen Bedingung steht, sodass der Schleifenzähler nicht weiter erhöht wird.
  • Fehler: Das Makro erstellt ein leeres Tabellenblatt.

    • Lösung: Überprüfe, ob die Bedingung korrekt definiert ist, bevor ein neues Blatt erstellt wird.

Alternative Methoden

Falls du eine For-Schleife vermeiden möchtest, kannst du auch mit einer einfachen Fehlerbehandlung arbeiten, um herauszufinden, ob ein Tabellenblatt bereits existiert:

Sub Blattname()
    On Error Resume Next
    Worksheets("Daten").Activate
    If Err.Number = 9 Then
        MsgBox "Tabelle nicht vorhanden"
    Else
        MsgBox "Tabelle vorhanden"
    End If
    On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
End Sub

Diese Methode verwendet die On Error Resume Next Anweisung, um Fehler zu ignorieren und zu überprüfen, ob das Tabellenblatt existiert.


Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere Tabellenblätter mit einem Zähler umbenennen kannst:

Sub Blatt_Einfügen()
    Dim i As Long
    Dim Zähler As Long
    For i = 1 To ActiveWorkbook.Sheets.Count
        If Sheets(i).Name Like "Daten*" Then Zähler = Zähler + 1
    Next
    If Zähler = 0 Then
        Worksheets.Add after:=Sheets(i - 1)
        ActiveSheet.Name = "Daten"
    Else
        Select Case MsgBox("Es besteht bereits ein oder mehrere Datenblätter." & vbLf & _
        "Soll ein neues Blatt als ""Daten " & Zähler + 1 & """ angelegt werden?", vbQuestion + vbYesNo)
            Case vbYes
                Worksheets.Add after:=Sheets(i - 1)
                ActiveSheet.Name = "Daten " & Zähler + 1
            Case Else
        End Select
    End If
End Sub

In diesem Beispiel wird die For-Schleife verwendet, um die Anzahl der bereits existierenden Datenblätter zu zählen und entsprechend zu benennen.


Tipps für Profis

  • Verwende On Error Resume Next mit Bedacht. Es ist eine mächtige Technik, die jedoch den Code schwerer debuggen kann, wenn du nicht vorsichtig bist.
  • Halte deine Schleifen so kurz wie möglich. Reduziere die Anzahl der Iterationen, indem du nur die notwendigen Blätter durchgehst.
  • Teste deinen Code schrittweise, um sicherzustellen, dass jede Bedingung wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich ein Tabellenblatt umbenennen, nachdem ich es erstellt habe?
Du kannst den Namen des aktivierten Blattes mit ActiveSheet.Name = "Neuer Name" ändern, nachdem das Blatt erstellt wurde.

2. Was passiert, wenn ich Exit For im falschen Teil der Schleife benutze?
Wenn Exit For im falschen Kontext verwendet wird, kann es dazu führen, dass die Schleife nicht korrekt durchlaufen wird und das gewünschte Verhalten nicht eintritt. Achte darauf, dass es in der richtigen Bedingung steht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige