Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
444to448
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA-Ablauf wird immer langsamer

VBA-Ablauf wird immer langsamer
27.06.2004 07:43:24
Many
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.
Hat dies etwas mit dem Speicher zu tun?
Wie kann ich den Speicher nach jedem Schleifen-Durchlauf frei machen?

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Ablauf wird immer langsamer
27.06.2004 07:52:51
Josef
Hallo Many!
Beitrag-Funktion
Zeigt einen Hinweis darauf, dass ein Forum-Teilnehmer eine Frage hat, eine Antwort geben möchte, eine allgemeine Bemerkung geben möchte.
Syntax
Beitrag begrüßungsformel,
[ Name ], Text, Schlussformel,
Die Syntax der Beitrag-Funktion verwendet die folgenden Argumente:
Teil Beschreibung
begrüßungsformel Erforderlich. Ein Zeichenfolgenausdruck, der den landesüblichen Geflogenheiten entspricht.
Eine Auswahl möglicher Werte kann der folgenden Zeile entnommen werden.
"Hallo", "Hi", "Guten Tag"
Auch die Verwendung von umgangssprachlichen Angaben, wie z Bsp "Moin" oder "Tach" ist möglich.
name Optional. Ein Zeichenfolgenausdruck, der mit Hilfe des Argumentes
begrüßungsformel die gewünschte Zielgruppe einschränkt.
text Erforderlich. Ein Zeichenfolgenausdruck, der Auskunft über das eigentliche Anliegen des Fragenden gibt.
Der Inhalt ist frei wählbar, sollte jedoch freundlich und qualifiziert gestaltet werden.
schlussformel Erforderlich. Ein Zeichenfolgenausdruck, der den landesüblichen Geflogenheiten entspricht.
Eine Auswahl möglicher Werte kann der folgenden Zeile entnommen werden.
"Ciao", "Gruß", "viele Grüße", "Tschüss"
Auch hier ist die Verwendung von umgangssprachlichen Angaben, wie z Bsp "und wech..." möglich.
Zusätzlich möglich ist es, dass schlussformel den eigenen Namen und/oder den Wert aus name enthält.

Gefunden von Thorsten in der Online-Hilfe!
Wenn du das gelesen und verstanden hast, dann Poste mal den Code
Gruß Sepp
Anzeige
AW: VBA-Ablauf wird immer langsamer
27.06.2004 17:30:36
Many
Hallo Sepp,
sorry, bin selten im Forum, mache setzen Autom. Grußformel drunter.
Sinn und Zweck des Makros
von z.Zt. 109 Einträgen von Adressen und Geburtsdaten., wird beim Betätigen dieses Buttons, die Liste nach den Geburtsmonaten sortiert. Jetzt hab ich sie erweitert, damit der akt. Monat (fast) in der Mitte der List gesetzt wird, so das am Ende des Jahres der Dez. und Jan. sich hintereinander in der Mitte befinden.
Die Geb.tage werden durch ein anderes Makro verschieden farblich hervorgehoben.
(Vor-Rückschau - Zeitraum frei wählbar und akt.Geb.)

Private Sub btnGebMon_Click()
On Error Resume Next
ActiveSheet.Protect UserinterfaceOnly:=True
Range("A4").Activate
SortiereAufw ("N4"), ("M4") 'Liste wird nach erst Monat, dann nach Tag sortiert.
letzterEintrag ' Letzte Zeile ermitteln, Var.= letzteZeile
ActiveSheet.Unprotect
aktMon = Month(Date)
Range("N:N").Select ' in dieser Spalte sind nur die Monate der Geb.-Daten
Finde (aktMon)
ActiveCell.Offset(0, -11).Select
zeza = ActiveCell.Row
If zeza + (Fix(letzteZeile / 2)) > letzteZeile Then
Zeilgrenze = zeza - (Fix(letzteZeile / 2))
If Zeilgrenze < 5 Then GoTo weiterGeb '3 Zeilen werden als Kopfzeilen verwendet.
umsetz = "4:" + Trim(Str(Zeilgrenze)) 'Vielleicht kann dies eleganter umsetzten !!
Rows(umsetz).Select
Selection.Cut
Rows(letzteZeile + 1).Select
Selection.Insert Shift:=xlDown
Else
Zeilgrenze = zeza + (Fix(letzteZeile / 2))
If zeza > letzteZeile Then GoTo weiterGeb
umsetz = Trim(Str(Zeilgrenze)) + ":" + Trim(Str(letzteZeile)) 'Vielleicht kann dies eleganter umsetzten !!
Rows(umsetz).Select
Selection.Cut
Rows("4:4").Select
Selection.Insert Shift:=xlDown
End If
weiterGeb:
mkAdr = ActiveCell.Address
Columns("M:BG").Select
Selection.EntireColumn.Hidden = True
Application.ScreenUpdating = True
ActiveWindow.ScrollRow = (Fix(letzteZeile / 2)) - 4
Cells(zeza, 1).Select
End Sub

Bestimmt kann man einiges besser Programmieren, für Tipps bin ich dankbar.
Gruß Many
Anzeige
AW: VBA-Ablauf wird immer langsamer
27.06.2004 22:26:33
Many
Hallo Sepp,
ich hab nochmal herumprobiert. Folgende Code reicht aus, das der Ablauf des Makros immer langsamer wird.
Bei der richtigen Code ändern sich die Menge der auszuschneidenen Zeilen, aber hier reicht nur jeine Zeile

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ügen über Zeile 4
Next sl
End Sub

Wenn mir jemand die Ursache erklären könnte, bzw. wie man ein Ausbremsen verhindern kann.
Na gut, in dem eigentlichen Ablauf wird keine Schleife durchlaufen, aber für Testzwecke brauche ich es doch.
Danke euch im Vorraus.
Gruß Many
Anzeige
AW: VBA-Ablauf wird immer langsamer
27.06.2004 22:35:36
Josef
Hallo Many!
Ohne deinen Code genauer angesehen zu haben, Die ganzen .Select und
.Activate sind unnötig, probier mal jeweils nach der Zeile
Selection.Insert Shift:=xlDown
die Anweisung
Application.CutCopyMode = False
um die Zwischenablage zu leeren.
Vieleicht bringt es was!
Gruß Sepp
AW: VBA-Ablauf wird immer langsamer
28.06.2004 16:40:36
Many
Hallo Sepp,
danke für dein Tipp (Application.CutCopyMode = False,) hat nichts gebracht, wird trotzdem immer langsamer.
Brauche nur einmal die Datei schließen und neu öffnen, ohne Excel zu beenden, dann läuft es wieder schnell und wird dann wieder langsamer.
Gruß Many
Anzeige
AW: VBA-Ablauf wird immer langsamer
30.06.2004 10:24:41
Otto
Hallo Many,
Meine Testumgebung: Excel 9.0 SR-1, Multilingual unter Windows 2000 SP-4
Ich habe Dein Beispiel mit einem Blatt getestet, das nur in Spalte A die Zeilennummer enthielt. Es ist trotz der überflüssigen Selects schnell durchgerast.
Hast Du Dir mal die xlBasics aus der DownloadArea von Hans' Server angesehen? Dort steht alles über Selektieren/Referenzieren!
So wäre Dein Beispiel besser programmiert:
Offensichtlich hängt das Ausbremsen bei Dir mit den Daten zusammen, die in den fraglichen Zeilen stehen. Ich wette, da stehen irgendwelche Funktionen drin, die jedesmal neu ausgewertet werden. Dagegen hilft:
vor Beginn der Operation und
nach der Operation
Gruß Otto
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige