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

For Schleife wird nur einmal durchlaufen b.Variant

For Schleife wird nur einmal durchlaufen b.Variant
24.07.2013 16:30:14
Reinhard
Hallo Wissende,
die zwei nachfolgenden For-Schleifen werden wie gewünscht 5mal bzw. 2mal durchlaufen.
Das geschieht auch wenn man bei Dim Byte, Single, Integer einsetzt.
Nehme ich Variant als Datentyp für Zei wird die For-Schleife nur noch einmal
durchlaufen.
Wodran liegt das denn genau?
Danke ^ Gruß
Reinhard

Option Explicit
Sub tt2mal()
Dim Zei As Long
Zei = 5
For Zei = 1 To Zei
MsgBox Zei
Next Zei
End Sub
Sub tt3mal()
Dim Zei As Long
Zei = 5
For Zei = -1 To Zei Step Zei
MsgBox Zei
Next Zei
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Schleife wird nur einmal durchlaufen b.Variant
24.07.2013 17:18:58
Rudi
Hallo,
eine Erklärung habe ich nicht.
Ich käme aber auch nie auf die Idee, eine Schleife so zu bauen.
Bei mir sieht das so aus:
Sub tt2mal()
Dim Zei As Integer, Anz
Anz = 5
For Zei = 1 To Anz
MsgBox Zei
Next Zei
End Sub

Gruß
Rudi

Das ist doch schon ein Wiederspruch,...
24.07.2013 17:51:02
Matze
Hallo Reinhard,
..in sich selbst : For Zei = 1 To Zei
Von 5 = 1 zu 5
wenn er vorne schon 5 hat passiert da auch nix mehr oder hab ich jetzt nen Denkfehler?
Sub 5mal()
Dim Zei As Long
For Zei = 1 To 5
MsgBox Zei
Next Zei
End Sub
gehe im Code mit dem Curser auf das Wort Variant oder Long oder Interger dann F1 drücken
das sollte dir schon mal vorab als Hilfe dienen.
Matze

Anzeige
Denkfehler - kein Wiederspruch :-)
24.07.2013 20:30:05
Erich
Hi Matze,
schau dir mal die folgende Prozedur an. Nach der ersten Schleife hat Zei den Wert 4.
Mit den Werten in der zweiten Schleife hat das gar nix zu tun.
Die zweite Schleife startet mit Zei=10, egal, was vorher war:

Sub aTest()
Dim Zei As Long
For Zei = 1 To 3
MsgBox Zei
Next Zei
' irgendein Code
MsgBox Zei
For Zei = 10 To 12
MsgBox Zei
Next Zei
End Sub
@Reinhard:
Wie Rudi habe auch ich keine Erklärung - weder für die Werte noch für das Programm ;-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Oha - Danke Erich - Spock sagt "logisch" owT
24.07.2013 20:54:26
Matze

Das ist kein Widerspruch, ...
25.07.2013 00:04:49
Luc:-?
…Matze;
und, Rudi,
sicher macht man das nicht, aber nur so kann man, wie man sieht, auch Seltsames entdecken und daraus ggf Wesentliches lernen… ;-)
Vermute, dass dieses Verhalten einerseits mit der Eigenschaft von For…To…Next-Köpfen, sich 1× kompiliert, zur Laufzeit nicht mehr zu ändern, und andererseits mit der das wohl unterlaufenden Eigenschaft von Variant-Variablen, bei auf sie angewendeten mathematischen Operationen, den passenden Untertyp anzunehmen, zusammenhängt (zumindest ist das andeutungsweise aus der vbHilfe herauslesbar). Davon scheint nach der 1.Erhöhung auch die KopfVariable betroffen zu sein.
Fazit: Ein interessantes Verhalten, dass man ggf nutzen könnte, wenn auch nicht unbedingt auf diese Weise.
Gruß Luc :-?

Anzeige
Korrigierende Ergänzung
25.07.2013 00:58:03
Luc:-?
Eigentl wird der Variant-Untertyp ja wohl schon mit Zei = 5 und dann wieder im Kopf mit Zei = 1 festgelegt. Trotzdem bleibt die Variable wohl offen für weitere Untertyp-Festlegungen zur Laufzeit, weshalb der For-Kopf wohl dynamisch veränderbar bleibt bzw dann wohl eher erst mit der letzten Zuweisung im Kopf „festgeschrieben“ wird, da die Erhöhung am Ende keinen Einfluss mehr hat (auch keine ExtraErhöhung im For-Körper).
Luc :-?

AW: For Schleife wird nur einmal durchlaufen b.Variant
25.07.2013 19:53:26
Gerd
Hallo zusammen,
der Fehler, wenn es denn einer ist, reduziert sich auf die Kombination
von Datentyp Zähler = Variant u. Zähler = Endpunkt der Schleife.
Denn so läuft es auch noch wie gewollt.
Sub schleife()
Dim zaehler As Variant, anzahl As Variant
anzahl = 4
For zaehler = 1 To anzahl
MsgBox zaehler
Next
End Sub
Gruß Gerd

Anzeige
Sicher, denn anzahl verändert sich ja auch nicht!
25.07.2013 20:01:57
Luc:-?
Gruß Luc :-?

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige