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
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
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
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?)
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.
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.
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.
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.
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