Anzeige
Archiv - Navigation
1748to1752
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
Inhaltsverzeichnis

VBA Performance

VBA Performance
03.04.2020 11:19:24
Marco
Hallo zusammen,
ich habe ein recht umfangreiches Makro geschrieben und versuche nun die Performance zu verbessern. Ich habe mich allgemein diesbezüglich auch schon ein wenig eingelesen was so die klassischen Performance-Fresser sind. Eine Info war, dass das aktivieren von Worksheets i.d.R. unnötig ist und Performance schluckt.
Leider erhalte ich allerdings bei direkter Ansprache immer einen Laufzeitfehler 1004.
Wenn ich das Activate auskommentiere läufts in einen Fehler, ansonsten funktioniert es
Hier das Beispiel:
Worksheets("C11").Range(Cells(3, 1), Cells(zend, 1)).Copy
' Worksheets("KZU").Activate
Worksheets("KZU").Range("b7").PasteSpecial Paste:=xlPasteValues
Danke & Gruß
Marco
PS: Wenn allgemein noch jemand ein gutes Tutorial zur Performance Verbesserung kennt würde ich mich freuen :-)

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Performance
03.04.2020 11:29:18
Nepumuk
Hallo Marco,
so:
With Worksheets("C11")
    .Range(.Cells(3, 1), .Cells(zend, 1)).Copy
End With

Gruß
Nepumuk
AW: VBA Performance
03.04.2020 11:37:54
Marco
super danke, das funktioniert direkt.
Ich würde jetzt noch gerne verstehen warum das funktioniert :D
Vor allen Dingen habe ich im Anschluss noch x-mal den gleichen code da weitere Spalten ebenfalls kopiert werden. Diese sind jetzt auch alle trotz entfall des .Activate und ohne with-Klammer ohne Probleme durchgelaufen.
Anzeige
AW: VBA Performance
03.04.2020 13:13:08
Nepumuk
Hallo Marco,
du musst, wenn du eine Range-Eigenschaft ansprichst, auch die Cells-Objekte auf die selbe Tabelle beziehen. Das machen die Bezugspunkte.
Gruß
Nepumuk
AW: VBA Performance
03.04.2020 13:30:00
Marco
Hallo Nepumuk,
danke, das habe ich verstanden. Frage mich dann allerdings, warum der Folgecode ohne Fehler durchläuft:
With Worksheets("C11")
.Range(.Cells(3, 1), .Cells(zend, 1)).Copy
End With
Worksheets("KZU").Range("b7").PasteSpecial Paste:=xlPasteValues
Worksheets("C11").Range(Cells(3, 8), Cells(zend, 8)).Copy
Worksheets("KZU").Range("c7").PasteSpecial Paste:=xlPasteValues
AW: VBA Performance
03.04.2020 17:13:46
Nepumuk
Hallo Marco,
kann ich nicht sagen. Aber halte dich an die von mir gegebenen Vorgaben, dann bist du auf alle Fälle auf der sicheren Seite.
Gruß
Nepumuk
Anzeige
AW: VBA Performance
03.04.2020 13:31:25
Daniel
Hi
1. ein Zellbezug (Range, Celle, Columns, Ross) ohne Tabellenblattangabe davor bezieht sich immer auf das gerade aktive Tabellenblatt.*
2. Das gilt auch dann, wenn der Zellbezug innerhalb einer anderen Funktion steht, bei der bereits ein Tabellenblatt angegeben ist, dieses Tabellenblatt wird nicht übernommen.
(Betroffene Funktionen wären neben Range(Cells(), Cells()) auch .Find und .Dort)
3. der Fehler kommt, wenn die Range auf einem anderen Tabellenblatt liegt als die beiden Cells, die sie definieren sollen
Die With-Klammer ist ein Hilfskonstruktion, mit dem man das häufige wiederholte hinschreiben eines häufig benutzten Objekts, beispielsweise ein Tabellenblatt.
Nach dem With wird das Objekt angegeben und dieses wird in det Folge immer dann eingesetzt, wenn ein Ausdruck mit dem Punkt beginnt (Beispiel siehe Nepumuk).
Gruß Daniel
* Es gibt eine Ausnahme: liegt das Makro in einem Tabellenblattmodul, dann wird ohne Angabe nicht das aktive, sondern das Tabellenblatt des Moduls eingesetzt.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige