PDA

Vollständige Version anzeigen : Live Schleifenzählung


feliweb
29.09.2016, 16:40
Hallo,

ich habe eine Schleife

for i to j

ich würde gerne in der Userform live sehen bei welchem i der Prozess gerade ist.

Also das da steht

i/j

Ist so etwas möglich?

Ich habe es damit versucht:
Label1.Caption = i
allerdings wird mir der Wert dann erst am Ende angezeigt und nicht "live"

VG
Feli

Hajo_Zi
29.09.2016, 16:57
label1.caption =I

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

rastrans
29.09.2016, 21:45
Hallo Feli,

dein Rechner soll halt zählen und sich nicht mit unnötigen Kleinigkeiten (Anzeige der Daten) aufhalten. Kostet nur Rechenzeit, also wird das unterdrückt.

Sag deinem Rechner, das er zwischendurch auch mal das anderes tun darf. Kaffee holen, Kuchen essen, aufs Klo gehen... sowas halt. :D

For i = 1 To 10 ^ 5
Label1.Caption = i
DoEvents
Next i
Damit gibst du deinem Rechner Rechenzeit, mal eben die Anzeige zu aktuallisieren. Dadurch ist er aber nicht mehr ganz so schnell. Du kannst ihm aber auch sagen, das er nur manchmal Kaffee trinken gehen darf: For i = 1 To 10 ^ 5
Label1.Caption = i
If i Mod 100 = 0 Then DoEvents
Next i
Hier muss er erstmal bis 100 zählen, und dann kommt dir Anzeige. Dann wieder die nächsten 100, dann Anzeige...

Viele Grüße
rastrans

feliweb
30.09.2016, 15:39
super danke, rastrans

feliweb
05.10.2016, 09:57
Hey,

noch eine Frage, rein aus Interesse, weil du die Rechnengeschwindigkeit angesprochen hast.

Ist die zweite Variante nicht viel rechenintensiver als die erste?

Immerhin wird doch bei jedem i noch zusätzlich Mod 100 gerechnet und überprüft ob das Ergebnis 0 ist?!

Oder habe ich da einen Denkfehler?

VG

RPP63neu
05.10.2016, 10:46
Moin!
Da ich Deinen Code nicht kenne, nur etwas prinzipielles:
Verzichte wenn irgend möglich auf Schleifen, vor allem in Zusammenhang mit Zellzugriffen!
Wenn es nicht anders geht, solltest Du die Berechnungen komplett im Arbeitsspeicher mittels temporärer Arrays durchführen und Zellmanipulationen en bloc schreiben.
Die mod-Berechnung ist extrem schnell, das merkst Du nicht.

Ich aktualisiere die Anzeige eines UserForm nicht mittels DoEvents, sondern mit Me.Repaint
Sowas nutze ich aber nur, wenn ich z.B. einen Countdown visualisieren möchte.

Gruß Ralf