Supportnet / Forum / Tabellenkalkulation
VBA-Ablauf wird immer langsamer
Frage
Hallo Experten,
zum Test, lasse ich ein VBA-Prg. in einer Schleife laufen (109 mal).
es werden z.B. 20 Zeilen, am Ende einer Liste, ausgeschnitten und am Anfang wieder eingefügt. Dabei stelle ich fest, das der Ablauf immer langsamer wird, der Prossezor 100 % ausgelastet ist.
Folgende Code reicht aus
Private Sub btnGebMon_Click()
For sl = 4 To 109
Rows("108:108").Select
Selection.Cut ' Ausschneiden der Zeile 108
Rows("4:4").Select
Selection.Insert Shift:=xlDown 'Einfüg üb.Z.4
Next sl
Gruß Mani
Antwort 1 von nighty
hi mani :)
so vielleicht kuerzer ?
nicht getestet !
Private Sub btnGebMon_Click()
For sl% = 4 To 109
Rows("108:108").Cut ' Ausschneiden der Zeile 108
Rows("4:4").Insert Shift:=xlDown 'Einfüg üb.Z.4
Next sl%
so vielleicht kuerzer ?
nicht getestet !
Private Sub btnGebMon_Click()
For sl% = 4 To 109
Rows("108:108").Cut ' Ausschneiden der Zeile 108
Rows("4:4").Insert Shift:=xlDown 'Einfüg üb.Z.4
Next sl%
Antwort 2 von Guenter
Hallo,
ich würde die folgenden Änderungen voschlagen:
Ob es etwas bringt, kannst Du ja mal schreiben.
Gruß
Günter
ich würde die folgenden Änderungen voschlagen:
Sub btnGebMon_Click()
For sl = 4 To 109
Application.ScreenUpdating = False
Rows("108:108").Cut ' Ausschneiden der Zeile 108
Rows("4:4").Insert Shift:=xlDown 'Einfüg üb.Z.4
Next sl
Application.ScreenUpdating = True
End Sub
Ob es etwas bringt, kannst Du ja mal schreiben.
Gruß
Günter
Antwort 3 von nighty
hi guenther GRINS
Application.ScreenUpdating = False
vergessen :(
gruss nighty
Application.ScreenUpdating = False
vergessen :(
gruss nighty
Antwort 4 von nighty
hi guenther
ich dann auch :)
Sub btnGebMon_Click()
Application.ScreenUpdating = False
For sl% = 4 To 109
Rows("108:108").Cut ' Ausschneiden der Zeile 108
Rows("4:4").Insert Shift:=xlDown 'Einfüg üb.Z.4
Next sl%
Application.ScreenUpdating = True
End Sub
gruss nighty
rem vor der schleife
rem Application.ScreenUpdating = False
wir ergaenzen uns gut :)
ich dann auch :)
Sub btnGebMon_Click()
Application.ScreenUpdating = False
For sl% = 4 To 109
Rows("108:108").Cut ' Ausschneiden der Zeile 108
Rows("4:4").Insert Shift:=xlDown 'Einfüg üb.Z.4
Next sl%
Application.ScreenUpdating = True
End Sub
gruss nighty
rem vor der schleife
rem Application.ScreenUpdating = False
wir ergaenzen uns gut :)
Antwort 5 von Guenter
Hi,
@nighty: vor der Schleife ist besser, stimmt.
Es ist halt noch früh am Morgen.
Ja, gute Ergänzungen!
Gruß
Günter
@nighty: vor der Schleife ist besser, stimmt.
Es ist halt noch früh am Morgen.
Ja, gute Ergänzungen!
Gruß
Günter
Antwort 6 von coros
Hi,
nur noch ein kleiner Hinweis, zum Thema Application.ScreenUpdating . Es reicht vollkommen aus, wenn die Bildschirmanzeige am Anfang auf False gesetzt wird. Am Ende der Anweisung braucht diese nicht wieder auf True gesetzt werden, das geht automatisch, wenn das Makro beendet ist.
Nur als kleiner Tip am Rande. Am obigen Code kann man meines Erachtens nach nichts mehr beschleunigen.
MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.
nur noch ein kleiner Hinweis, zum Thema Application.ScreenUpdating . Es reicht vollkommen aus, wenn die Bildschirmanzeige am Anfang auf False gesetzt wird. Am Ende der Anweisung braucht diese nicht wieder auf True gesetzt werden, das geht automatisch, wenn das Makro beendet ist.
Nur als kleiner Tip am Rande. Am obigen Code kann man meines Erachtens nach nichts mehr beschleunigen.
MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.
Antwort 7 von Mani
Hallo nighty (Antwort 4),
das hat geholfen, Fehler ist weg.
Kann noch viel lernen, muß mir doch langsam eine Flatrate zulegen.
Vielen Dank
Gruß Mani
das hat geholfen, Fehler ist weg.
Kann noch viel lernen, muß mir doch langsam eine Flatrate zulegen.
Vielen Dank
Gruß Mani