Event nach Refresh einer Connection in Excel VBA
Schritt-für-Schritt-Anleitung
Um ein Event auszulösen, nachdem eine Connection in Excel aktualisiert wurde, kannst Du das Worksheet.Change Event nutzen. Hier sind die Schritte, um dies zu implementieren:
-
Öffne den VBA-Editor (drücke ALT + F11).
-
Füge ein neues Modul ein:
- Rechtsklick auf "VBAProject (DeinWorkbook)" > Einfügen > Modul.
-
Füge folgenden Code ein:
Private Sub Worksheet_Change(ByVal Target As Range)
' Dein Code, der nach der Aktualisierung ausgeführt werden soll
MsgBox "Die Verbindung wurde aktualisiert!"
End Sub
-
Schließe den VBA-Editor und gehe zurück zu Excel.
-
Aktualisiere die Connection (z.B. über Daten > Abfragen und Verbindungen > Alle aktualisieren).
Häufige Fehler und Lösungen
Alternative Methoden
Eine weitere Möglichkeit, nach einer querytable.refresh oder activeworkbook.connections refresh ein Event auszulösen, ist das Verwenden von Application.OnTime, um eine Routine nach einer bestimmten Zeitspanne auszuführen. Hier ein Beispiel:
Sub RefreshAndNotify()
ActiveWorkbook.Connections("Abfrage - GV").Refresh
Application.OnTime Now + TimeValue("00:00:01"), "NotifyRefresh"
End Sub
Sub NotifyRefresh()
MsgBox "Die Connection wurde aktualisiert!"
End Sub
Praktische Beispiele
Hier ist ein Beispiel, wie Du eine Connection aktualisieren und dann ein Ereignis auslösen kannst:
Sub RefreshData()
With ActiveWorkbook.Connections("Abfrage - GV")
.Refresh
End With
MsgBox "Die Daten wurden erfolgreich aktualisiert!"
End Sub
Dieses Skript aktualisiert die Verbindung und zeigt eine Nachricht an, wenn der Prozess abgeschlossen ist.
Tipps für Profis
-
Verwende BackgroundQuery für eine asynchrone Aktualisierung. Dadurch wird Excel nicht blockiert, während die Daten geladen werden.
-
Nutze QueryTable.AfterRefresh in Kombination mit einer Worksheet-Eventprozedur, wenn Du mehr Kontrolle benötigst.
-
Halte Deine VBA-Projekte gut dokumentiert, um die Wartung und das Debugging zu erleichtern.
FAQ: Häufige Fragen
1. Was mache ich, wenn QueryTable.AfterRefresh nicht funktioniert?
Stelle sicher, dass Du das Event im richtigen Kontext verwendest. Bei Verbindungen, die nicht über QueryTable verwaltet werden, solltest Du das Worksheet.Change Event verwenden.
2. Wie kann ich sicherstellen, dass meine Verbindung immer aktuell ist?
Du kannst die Eigenschaft .RefreshOnFileOpen auf True setzen, sodass die Verbindung beim Öffnen der Datei automatisch aktualisiert wird.