VBA: Refresh abwarten in Excel
Schritt-für-Schritt-Anleitung
Um in Excel VBA zu warten, bis die Aktualisierung abgeschlossen ist, kannst du den folgenden Code verwenden:
ActiveWorkbook.RefreshAll
Do
DoEvents
Loop Until Application.CalculationState = xlDone
ActiveWorkbook.Save
Dieser Code führt die RefreshAll-Methode aus und wartet dann, bis der Zustand der Berechnung (CalculationState) den Wert xlDone erreicht hat. Dies stellt sicher, dass der Save-Befehl erst ausgeführt wird, wenn die Aktualisierung abgeschlossen ist.
Häufige Fehler und Lösungen
-
Fehler: Speichern schlägt fehl
- Ursache: Das Speichern erfolgt, bevor die Aktualisierung abgeschlossen ist.
- Lösung: Verwende die oben angegebene Methode, um sicherzustellen, dass
ActiveWorkbook.Save erst nach der Aktualisierung aufgerufen wird.
-
Fehler: Aktualisierung im Hintergrund
- Ursache: Die Option „Aktualisierung im Hintergrund zulassen“ ist aktiviert.
- Lösung: Deaktiviere diese Option in den Verbindungseigenschaften unter „Daten - Verbindungen“.
Alternative Methoden
Falls du eine andere Herangehensweise ausprobieren möchtest, kannst du auch Application.Wait verwenden, aber beachte, dass dies nicht ideal ist, da die Laufzeiten der Aktualisierungen variieren können. Eine bessere Methode ist die Nutzung von DoEvents, wie im obigen Beispiel.
Eine andere Option ist die Verwendung von RefreshConnection:
For Each conn In ActiveWorkbook.Connections
conn.Refresh
Next conn
Diese Methode kann in manchen Fällen schneller sein, wenn du spezifische Verbindungen aktualisieren möchtest.
Praktische Beispiele
Hier ist ein praktisches Beispiel, wie du die Aktualisierung aller Datenquellen in einem Arbeitsbuch durchführen kannst:
Sub RefreshAndSave()
ActiveWorkbook.RefreshAll
Do
DoEvents
Loop Until Application.CalculationState = xlDone
ActiveWorkbook.Save
End Sub
Dieser Makro führt eine vollständige Aktualisierung durch und wartet, bis alle Berechnungen abgeschlossen sind, bevor das Arbeitsbuch gespeichert wird.
Tipps für Profis
-
Verwende Application.ScreenUpdating = False: Dies kann die Ausführungsgeschwindigkeit bei großen Datenmengen verbessern, indem das Bildschirm-Rendering deaktiviert wird.
-
Fehlerbehandlung: Füge eine Fehlerbehandlung hinzu, um sicherzustellen, dass dein Makro auch bei unerwarteten Problemen stabil bleibt:
On Error Resume Next
' Dein Code hier
On Error GoTo 0
- Testen in verschiedenen Excel-Versionen: Achte darauf, dass die verwendeten VBA-Methoden in der von dir genutzten Excel-Version verfügbar sind.
FAQ: Häufige Fragen
1. Wie kann ich die Aktualisierung für bestimmte Abfragen oder Datenquellen steuern?
Du kannst spezifische Abfragen mit ActiveWorkbook.Connections("DeineVerbindung").Refresh aktualisieren, um eine gezielte Aktualisierung durchzuführen.
2. Gibt es eine Möglichkeit, den Aktualisierungsstatus zu überwachen?
Ja, du kannst den Status der Aktualisierung mit Application.CalculationState überwachen, um festzustellen, ob die Berechnungen abgeschlossen sind.
3. Was passiert, wenn ich die Aktualisierung im Hintergrund lasse?
Wenn die Aktualisierung im Hintergrund erfolgt, kann es passieren, dass dein Save-Befehl vor der Fertigstellung der Aktualisierung ausgeführt wird, was zu Fehlern führt. Deaktiviere diese Option für mehr Kontrolle.