Excel VBA: Warten bis der Refresh abgeschlossen ist
Schritt-für-Schritt-Anleitung
-
Makro erstellen: Öffne den VBA-Editor in Excel (ALT + F11) und erstelle ein neues Modul.
-
Code hinzufügen: Füge den folgenden Code ein, um zu warten, bis der Refresh abgeschlossen ist. Hier wird die Application.CalculationState verwendet, um sicherzustellen, dass alle Berechnungen abgeschlossen sind.
Sub Auswertung()
Application.ScreenUpdating = False
Dim ta As Worksheet
Set ta = Worksheets("Auswertung")
ThisWorkbook.RefreshAll
Do
DoEvents
Loop Until Application.CalculationState = xlDone
If ta.Cells(5, 12) > 0 Then
ta.Shapes("Rounded Rectangle 1").Visible = True
Else
ta.Shapes("Rounded Rectangle 1").Visible = False
End If
Application.ScreenUpdating = True
End Sub
-
Verbindungseigenschaften anpassen: Stelle sicher, dass die Hintergrundaktualisierung deaktiviert ist. Gehe zu Daten > Vorhandene Verbindungen, klicke mit der rechten Maustaste auf jede Verbindung und deaktiviere die Option „Aktualisierung im Hintergrund zulassen“.
-
Makro ausführen: Führe das Makro aus, um zu überprüfen, ob die Schaltfläche korrekt ein- oder ausgeblendet wird, abhängig von den Zelleninhalten.
Häufige Fehler und Lösungen
-
Problem: Das Makro wartet nicht richtig und zeigt immer 0 an.
Lösung: Überprüfe die Application.CalculationState, um sicherzustellen, dass alle Berechnungen abgeschlossen sind, bevor du die Zelle überprüfst.
-
Problem: Der Refresh erfolgt nicht sofort.
Lösung: Stelle sicher, dass die Hintergrundaktualisierung deaktiviert ist. Dies kann das Warten auf den Refresh erheblich beschleunigen.
Alternative Methoden
Eine alternative Methode zur Verwendung von Application.CalculationState ist die Nutzung des Worksheet_Calculate Ereignisses. Hier ist ein Beispiel, das du im Modul des Arbeitsblattes „Avisdaten“ hinzufügen kannst:
Private Sub Worksheet_Calculate()
With Application
.EnableEvents = False
.Calculation = xlCalculationManual
Worksheets("Auswertung").Shapes("Rounded Rectangle 1").Visible = (Cells(5, 12) > 0)
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Diese Methode sorgt dafür, dass die Sichtbarkeit der Schaltfläche aktualisiert wird, sobald die Berechnung auf dem Arbeitsblatt abgeschlossen ist.
Praktische Beispiele
-
Beispiel 1: Wenn du eine Tabelle mit Rechnungen hast, die automatisch aktualisiert werden, kannst du das oben genannte Makro verwenden, um sicherzustellen, dass die Schaltflächen entsprechend der Rechnungsanzahl angezeigt werden.
-
Beispiel 2: Bei der Arbeit mit Pivot-Tabellen kannst du denselben Ansatz verwenden, um sicherzustellen, dass die Daten vor der Anzeige aktualisiert werden.
Tipps für Profis
-
Debugging: Verwende Debug.Print in deinem Code, um den Status deiner Variablen während der Ausführung zu verfolgen. Dies kann hilfreich sein, um zu verstehen, ob das Warten wirklich funktioniert.
-
Optimierung: Reduziere die Anzahl der Berechnungen, indem du manuelle Berechnungen (xlCalculationManual) verwendest, bevor du die Aktualisierungen vornimmst.
-
Verwendung von Application.Wait: In einigen Fällen kann es sinnvoll sein, eine kurze Pause im Code einzufügen, um sicherzustellen, dass alle Prozesse abgeschlossen sind.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass das Makro nicht einfriert?
Verwende DoEvents in einer Schleife, um sicherzustellen, dass Excel auf Benutzerinteraktionen reagiert.
2. Was tun, wenn die Schaltfläche nicht erscheint?
Stelle sicher, dass die Zelle (5,12) die erwarteten Daten enthält und dass die Sichtbarkeit der Schaltfläche korrekt gesetzt wird. Überprüfe auch die Verbindungseinstellungen für die Datenquelle.