Excel for next Schleife

Hallo,
Kann es sein das ich innerhalb einer For Next schleife die Varible z.b für das ende nicht verändern kann?
Bespiel

Ende = 50

For Anfang = 1 to Ende

If ereignis then Ende = ende +3
Next

Mein Programm verlässt die Schleife nach dem 50sten Durchlauf egal wie ich den Wert der Variablen Ende innerhalb der Schleibe auch verändere.

Grüezi Goetz

Kann es sein das ich innerhalb einer For Next schleife die
Varible z.b für das ende nicht verändern kann?
Bespiel

Ende = 50

For Anfang = 1 to Ende

If ereignis then Ende = ende +3
Next

Mein Programm verlässt die Schleife nach dem 50sten Durchlauf
egal wie ich den Wert der Variablen Ende innerhalb der
Schleibe auch verändere.

Ja, das ist richtig - die Variable wird im For-Teil initialisiert und kann dann nicht innerhalb der Schleife verändert werden.

In diesem Falle müsstest Du wohl auf eine Do-Loop Schleife ausweichen und den Zähler darin hochzählen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo,
ich verstehe die Frage nicht ganz, wenn sich VBA so verhält dann ist das wohl so, VBA liest die Variable nur beim Eintritt in die Schleife aus. Die gewünschte Funktionalität lässt sich wie folgt erreichen:
i = 1
ende = 50
do while i

Kurze Antwort: Ja

Lange Antwort: Ja, aber es gibt in der Regel genügend Möglichkeiten das ab zu fangen ohne grossartigen Programmieraufwand. Vielleicht ist einfach eine andere Schleife besser geeignet (While oder Do) oder kopierst die Schleife einfach vorne nochmals hin, machst eine weitere Variable und löst das Problem in 2 Schritten.
Wenns nur ums zählen geht gibts aber auch den Count-Befehl. Also zum Beispiel

Public Sub zeilenanzahl()
Dim anzahl
anzahl = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
MsgBox (anzahl)
End Sub

Falls du noch Fragen hast schreib einfach nochmals.
Gruss
platibyte

Hallo ggoetz56,

du gehst das Ganze falsch an.
Lege eine neue Tabelle an und füge im Script-Modus (mit Alt+F11) ein neues Modul ein.
Dort schreibst du dann folgendes Script hinein:
Sub Abbruchbedingung()
’ Beispiel, wenn in Tabelle1, Zelle-A1 eine Zahl steht,
’ Z.B. die 30
’ Die 30 ist dann mein Ereignis für die Abbruchbedingung
Dim Ende As Integer, Ereignis As Integer
Ende = 50
For Anfang = 1 To Ende
Ereignis = Sheets(„Tabelle1“).Cells(1, 1)
If Ereignis

Hallo ggoetz56,

falls die Zeile tatsächlich so geschrieben wurde kann es nicht funktionieren. Wenn Ende vor der Schleife gesetzt ist, wird dieser Wert auch abgearbeitet egal was in der Schleife mit dieser Variablen gemacht wird (jedenfalls bei MSOffice 2003).
(In der Zeile nach ereignis kommt doch sicherlich noch ein =, > … oder so ? oder etwa nicht?)

Gruß Hugo

Hallo,

um was genau gehts bei der schleife, wenns darum geht, bei einer gewissen zahl die schleife abzubrechen.
setz exit for hinein.

gruß fred

Hallo ggoetz56,

die Schleife lässt sich manipulieren, indem man den Wert „Anfang“ ändert. Denn dieser ist es, der weitergezählt wird.

Hier kann man also zwischendurch z.B. sagen:
Anfang= Anfang+3

Damit werden 3 Durchgänge weniger gezählt.

Gruß
Natator

Hallo ggoetz56,
wenn es nicht geht, bietet VBA diverse andere Konstrukte.
Man formuliere die For-Schleife in eine While-Schleife um, voilà! Es geht!

i = 0: Ende = 50
While i 

Vielen Dank für die kompetene und schnelle Antwort,
jetzt arbeite ich ja schon ziemlich lange mit Excel VBA, aber dass die Variblen sich so unterschiedlich verhalten, ist mir bisher noch nicht aufgefallen.

Nochmals Danke.
Gruß
Gerhard

Werde das tun.
DAnke

Vielen Dank für die kompetene und schnelle Antwort,
jetzt arbeite ich ja schon ziemlich lange mit Excel VBA, aber dass die Variablen sich so unterschiedlich verhalten, ist mir bisher noch nicht aufgefallen.

Nochmals Danke.
Gruß
Gerhard

der endwert (und anfangswert) wird nur zu laufzeitbeginn ausgewertet und offensichtlich in einer internen variablen gespeichert. die laufzeit wäre länger / zu lang, wenn bei jedem schleifendurchlauf der anfangs- und endwert neu ausgewertet werden würde.

Vielen Dank für die schnelle und hilfreiche Auskunft.
Gerhard

Das ist korrekt, beim Eintritt in die Schleife wird der Wert von Ende intern gespeichert, zwar veränderst Du in der Schleife den Wert der Variablen Ende, dieser wird aber nicht mehr erneut ausgelesen, das geschieht nur beim erneuten Eintritt in die Schleife.

Hier würde sich eine Do … While Schleife wohl besser eignen.

Hallo ggoetz,

Kann es sein das ich innerhalb einer For Next schleife die
Varible z.b für das ende nicht verändern kann?

Ja, der Ende-Wert wird in der For-Anweisung in eine nicht änderbare interne Variable eingelesen.
Den Schleifen-Zähler selbst kann man ändern, sollte man aber möglichst auch vermeiden.

Für Schleifen mit unbestimmter Anzahl Durchläufe sollte man Do…Loop- oder While…Wend-Schleifen verwenden.

Gruß
Franz

Beispiel:

Sub bbTest()
 Dim Ende As Long, Anfang As Long, Ereignis As Boolean
 Ende = 50
 Anfang = 0
 Do
 Anfang = Anfang + 1
 '....
 Ereignis = True 'Testzeile
 Loop Until IIf(Ereignis = True, Anfang = Ende + 3, Anfang = Ende)
 MsgBox "Ende: " & Ende & " | Anfang " & Anfang 'testzeile
End Sub

Vielen Dank für die schnelle und hilfreiche Auskunft
Gerhard

Vielen Dank für die schnelle und hilfreiche Auskunft.
Gerhard.

Hallo,
ich würde es vielleicht mit einer zweiten Schleife versuchen - also z.B. so:

Sub test()
ende = 20

For Anfang = 1 To ende

If Anfang = 12 Then
ende2 = Anfang + 3
GoTo weiter
End If
Next Anfang
GoTo weiter2

'Neue Schleife
weiter:
For Anfang2 = Anfang To ende2

Next Anfang2

weiter2:
End Sub

Die Routine ist ungetestet, aber sollte funktionieren.
Gruß,
Ptonka