Warum wird VBA durch Optimierung langsamer?

3 Antworten

Ja genau - jetzt wird die Formatierung für alle Zellen durchgeführt.

Grundsätzlich immer auf Select und Activate verzichten. Alles, was man sieht, ist ein Objekt und kann eindeutig identifiziert werden.

Also man könnte z.B. schreiben:

With ActiveSheet.Cells(13,2).Font
- jetzt hier die ganzen Formatierungen
End With

Und wenn Du die Zelle B13 (in der Cells Schreibweise ist das die 13te Zeile und 2te Spalte - deshalb Cells(13,2) ) aus einem anderen Sheet formatieren willst, ist es egal, wo Du stehst, dann benennst Du einfach das Sheet, Beispiel:

With Worksheets("Blattname").Cells(13,2).Font
...
End With


Lamio13 
Beitragsersteller
 22.12.2020, 19:01

Bezogen auf den ersten Code: Allerdings wird ja nur die Zelle aktiviert, aber formatiert wird schon das gesamte Tabellenblatt und nicht nur B13, "Cells.Select". Wenn ich "Range("B13").Activate" herauslösche, bleibt die Geschwindigkeit identisch, also weiterhin schnell.

1

Auf den ersten Blick würde ich schauen, welche Zellen durch das verkürzte Makro bearbeitet werden.

Ich habe den Verdacht, ohne jetzt in den Code während der Laufzeit geschaut zu haben, dass der originale Code nur eine Zelle, B13, bearbeitet, während der gekürzte eventuell sogar das gesamte Tabellenblatt mit all seinen Zellen erfassen könnte.

Schau Dir mal an, wie man mit dem Debugger und Stopppunkten umgeht, auch mit der Zeilenweisen Ausführung F8.

Excel VBA Debugging ist zum Beispiel hier beschrieben, wobei ich gerade wesentlich bessere Videos in englischer Sprache gefunden habe:

https://youtu.be/s62RapTIwTc

Hilft Dir das?

Woher ich das weiß:eigene Erfahrung

Lamio13 
Beitragsersteller
 22.12.2020, 17:55

Schonmal danke. Das Video habe ich noch nicht ganz angeschaut. Ich habe gerade nochmal probiert, folgende Zeile auszukommentieren:

'Range("B13").Activate

Somit bleibt es auf jeden Fall, dass auch im ersten Code alle Zellen formatiert werden, das ändert jedoch nichts an der Geschwindigkeit.

1
CKH1981  22.12.2020, 18:08
@Lamio13

Dann ändere im verkürzten Code die Zeile "With Cells.Font" ab zu "With Selection.Font".

1
Lamio13 
Beitragsersteller
 22.12.2020, 19:02
@CKH1981

Gemacht, bleibt jedoch langsam. Ich habe es jetzt mal genauso wie im anderen Dokument, also mit Select gemacht, und trotzdem ist es noch deutlich langsamer. Muss wohl an was anderes liegen...

1

Grundsätzlich immer nur soviel ändern wie nötig.
Zunächst also den Bereich ermitteln, der angepasst werden muss.
Hier hilft
UntersteZeile = Worksheets("Bla").UsedRange.Rows.Count
RechtesteSpalte = Worksheets("Bla").UsedRange.Columns.Count
Application.EnableEvents = False 'Abschalten der ExcelEvents damit es sich nur um die nächsten Zeilen kümmert

Range(Cells(1,1),Cells(UntersteZeile, RechtesteSpalte)).Font.Name = "Calibri"
Range(Cells(1,1),Cells(UntersteZeile, RechtesteSpalte)).Font.Size = 14
Range(Cells(1,1),Cells(UntersteZeile, RechtesteSpalte)).Font.ThemeColor = xlThemeColorLight1
Range(Cells(1,1),Cells(UntersteZeile, RechtesteSpalte)).Font.ThemeFont = xlThemeFontMinor

Application.EnableEvents = True 'Nicht vergessen dies wieder anzuschalten.