Supportnet Computer
Planet of Tech

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%

Antwort 2 von Guenter

Hallo,

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



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 :)

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




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.

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: