Makro erst nach vollständiger Berechnung ausführen
Schritt-für-Schritt-Anleitung
Um sicherzustellen, dass ein Excel-Makro erst nach der vollständigen Berechnung der Arbeitsmappe ausgeführt wird, kannst Du die folgenden Schritte befolgen:
-
Teile Dein Makro in zwei separate Teile. Der erste Teil wird die Berechnung durchführen, der zweite Teil wird die Ergebnisse verarbeiten.
-
Nutze den Befehl Application.OnTime, um das zweite Makro zeitverzögert auszuführen. Hier ist ein Beispiel:
Sub makro1()
' Berechnung ausführen
RefreshAll ' oder andere Berechnungsbefehle
Application.OnTime Now + TimeValue("00:00:05"), "makro2" ' 5 Sekunden Verzögerung
End Sub
Sub makro2()
' Ergebnisse in der Listbox anzeigen
End Sub
-
Stelle sicher, dass das zweite Makro nicht mit Call aufgerufen wird, sondern am Ende der OnTime-Zeile in Anführungszeichen steht.
Häufige Fehler und Lösungen
Alternative Methoden
Eine andere Möglichkeit, um sicherzustellen, dass alle Berechnungen abgeschlossen sind, ist die Verwendung einer Schleife. Hier ist ein Beispiel:
Do
DoEvents
Loop Until Application.CalculationState = xlDone
Diese Schleife wartet, bis der Berechnungsstatus von Excel auf xlDone wechselt, bevor das nächste Makro ausgeführt wird. Dies kann besonders nützlich sein, wenn Du sicherstellen möchtest, dass alle Daten vollständig sind, bevor Du mit der Verarbeitung fortfährst.
Praktische Beispiele
Angenommen, Du möchtest die Berechnung von Makronährstoffen in einer Excel-Tabelle durchführen und die Ergebnisse in einer Listbox anzeigen. Hier ist ein einfaches Beispiel:
Sub berechneMakronährstoffe()
' Berechnung der Nährstoffe
RefreshAll
Application.OnTime Now + TimeValue("00:00:05"), "zeigeErgebnisse"
End Sub
Sub zeigeErgebnisse()
' Ergebnisse in einer Listbox anzeigen
ListBox1.AddItem "Protein: " & Cells(1, 1).Value
ListBox1.AddItem "Kohlenhydrate: " & Cells(1, 2).Value
ListBox1.AddItem "Fette: " & Cells(1, 3).Value
End Sub
Dieses Beispiel zeigt, wie Du ein Makro zur Berechnung von Makronährstoffen verwenden kannst und die Ergebnisse nach einer kurzen Verzögerung in einer Listbox anzeigst.
Tipps für Profis
- Nutze
DoEvents innerhalb von Schleifen, um die Benutzeroberfläche reaktionsfähig zu halten, während Excel Berechnungen durchführt.
- Experimentiere mit der Verzögerungszeit in
Application.OnTime, um die besten Ergebnisse für Deine spezifischen Berechnungen zu erzielen.
- Teste Deine Makros regelmäßig, um sicherzustellen, dass sie unter verschiedenen Bedingungen funktionieren.
FAQ: Häufige Fragen
1. Wie lange sollte ich warten, bevor ich das zweite Makro aufrufe?
Die optimale Wartezeit hängt von der Größe Deiner Daten und der Komplexität der Berechnungen ab. In vielen Fällen sind 5 Sekunden ausreichend, aber Du kannst die Zeit anpassen.
2. Kann ich die Schleife auch ohne DoEvents verwenden?
Ja, Du kannst die Schleife ohne DoEvents verwenden, aber dies kann dazu führen, dass Excel nicht mehr reagiert, während die Berechnungen abgeschlossen werden. Es wird empfohlen, DoEvents zu verwenden, um die Benutzeroberfläche reaktionsfähig zu halten.