Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
964to968
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
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA ist langsam

VBA ist langsam
11.04.2008 12:47:51
peteregloff
Hallo zusammen - ich habe ein Makro, das Leerzeilen einfügt. Wenn zwischendurch andere Makros aufgerufen werden, wird es bei einem weiteren Aufruf sehr langsam (1...2 Sekunden pro Zeile sonst ca. 10 Zeilen pro Sekunde). Es ist also nicht das Makro an sich sondern die Umgebung die sich verändert (evt. der Arbeitsspeicher). Wie kann ich den Arbeitsspeicher zu beginn eines Makros löschen? Oder hat jemand eine andere Vermutung? Freue mich auf Euren Feedback.
PeterE

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA ist langsam
11.04.2008 12:54:01
ransi
HAllo
Schau dir mal die 4 "üblichen Verdächtigen" an.
Select + Activate
Automatische Berechnung -->Application.Calculation
Bildschirmaktualisierung-->Application.Screenupdating
Ereignissmakros-->Application.Enableevents
Wenigstes einer von den 4en bremst dich da aus.
ransi

AW: VBA ist langsam
11.04.2008 23:26:39
Daniel
Hi
Zeilen einfügen ist für Excel sehr zeitaufwendig.
was Excel dagegen sehr schnell kann, ist sortieren.
daher bietet sich folgende Lösung an:
1. eine spalte einfügen mit den Zeilennummern.
2. für jede Zeile, die eingefügt werden soll, schreibt das Mako am Ende der Daten einen Zwischenwert in die Zeilenspalte, dh. wenn zwischen Zeile 7 und 8 eine Leerzeile eingefügt werden soll, an wird am Ende in die erste leere Zeile der Wert 7,5 geschrieben
3. dann nach der Spalte mit den Zeilen-Nummern sortieren
4. die Spalte mit den Zeiennummen wieder löschen
damit sollten jegliche Performance-Probleme vom Tisch sein.
der folgende Code würde nach jeder Zeile die ein "x" enthält, eine Leerzeile einfügen.

Sub Leerzeilen_einfügen()
Dim z1 As Long, z2 As Long, z3 As Long, i As Long
z1 = ActiveSheet.UsedRange.Row
z2 = ActiveSheet.UsedRange.Rows.Count
z3 = z1 + z2
Dim Zelle As Range
Columns(1).Insert
With Cells(z1, 1).Resize(z2, 1)
.FormulaLocal = "=Zeile()"
.Formula = .Value
End With
For i = z1 To z2 + z1 - 1
If Cells(i, 2) = "x" Then
Cells(z3, 1) = i + 0.5
z3 = z3 + 1
End If
Next
Cells(z1, 1).Resize(z3 - z1, 1).EntireRow.Sort , key1:=Cells(z1, 1), order1:=xlAscending,  _
header:=xlNo
Columns(1).Delete
End Sub


zugegeben, die Schleife zum suchen ist nicht besonders effektiv, aber ich kenne deine Regeln nicht und hier gehts ja ums Prinzip, wie man Leerzeilen einfügt.
https://www.herber.de/bbs/user/51465.xls
Gruß, Daniel

Anzeige
AW: VBA ist langsam
15.05.2008 12:55:00
peteregloff
Vielen Dank für die beiden Infos, beide sind für mich sehr wertvoll und ich werde das Makro umschreiben - doch die Frage besteht weiter. Warum ist das gleiche Makro nach dem Ausführen eines anderen auf einmal 10-20mal langsamer als vorher - vielleicht habe ich mich jetzt deutlicher ausgedrückt. Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige