Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Refresh abwarten

Forumthread: VBA: Refresh abwarten

VBA: Refresh abwarten
11.07.2013 11:09:18
PeTeR
Hallo VBA-Gemeinde,
in meinem Makro laufen 2 Befehle nacheinander ab:
ActiveWorkbook.RefreshAll
ActiveWorkbook.Save
Der 2. Befehl liefert eine Fehlermeldung, da der Refresh ca. 20 Sekunden dauert und somit das Save viel zu früh erfolgt.
Wie kann ich das Makro dazu bringen solange zu warten, bis der Refresh beendet ist?
Ein Application.Wait halte ich für ungünstig, da der Refresh unterschiedliche Laufzeiten aufweist.
Vielen Dank für eure Hilfe
PeTeR

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA: Refresh abwarten
11.07.2013 11:19:26
ChrisL
Hi Peter
Probier mal unter Daten - Verbindungen - Eigenschaften die Option "Aktualisierung im Hintergrund zulassen" zu deaktivieren.
cu
Chris

AW: VBA: Refresh abwarten
11.07.2013 11:47:36
MatthiasG
Hallo Peter,
ich weiß nicht sicher, ob das Abfragen der .CalculationState-Eigenschaft in deinem Beispiel hilft. Probier mal:

ActiveWorkbook.RefreshAll
Do
DoEvents
Loop Until Application.CalculationState = xlDone
ActiveWorkbook.Save

Gruß Matthias

Anzeige
AW: VBA: Refresh abwarten
11.07.2013 19:25:29
PeTeR
Hallo ChrisL und Matthias,
vielen Dank für Eure Tips - das muss ich jetzt mal testen.
DANKE!!!
PeTeR
;
Anzeige

Infobox / Tutorial

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

  1. 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.
  2. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige