Schließlich möchte ich ein Makro ausführen, nachdem jeder die Arbeitsmappe aktualisiert, insbesondere mit der Schaltfläche Aktualisieren in Excel auf der Registerkarte Daten. Vorläufig wäre ich jedoch zufrieden damit, dass die Ereignisse BeforeRefresh oder AfterRefresh QueryTable ausgelöst werden, wenn die Schaltfläche Aktualisieren gedrückt wird.So rufen Sie das Makro nach dem Aktualisieren oder Aktualisieren auf Alle Taste gedrückt?
Neben dem auf dem Microsoft Dev Center-Website angeboten ‚Dokumentation‘, die entsprechenden Beiträge, die ich im Rahmen dieses Forschungsprozesses gelesen haben, gehören:
- Excel VBA - QueryTable AfterRefresh function not being called after Refresh completes
- VBA For Excel AfterRefresh Event
- Es andere sind weniger hilfreiche oder relevante Beiträge, aber mir fehlt der Ruf, sie hier zu posten.
Ich vermisse eindeutig etwas Wichtiges (und am ehesten offensichtlich). Hier ist, was ich habe bisher:
Unter Klassenmodule (qtclass)
Option Explicit
Private WithEvents qt As Excel.QueryTable
Private Sub qt_AfterRefresh(ByVal Success As Boolean)
MsgBox "qt_AfterRefresh called sucessfully."
If Success = True Then
Call Module2.SlicePivTbl
MsgBox "If called succesfully."
End If
End Sub
Private Sub qt_BeforeRefresh(Cancel As Boolean)
MsgBox "qt_BeforeRefresh called."
End Sub
Unter dem Thisworkbook-Modul
Private Sub Workbook_Open()
Dim qtevent As qtclass
Dim qt As QueryTable
Set qt = ThisWorkbook.Worksheets("Data-Fund").ListObjects(1).QueryTable
Set qtevent = New qtclass
End Sub
ich versucht habe, Variationen des zweiten Codeblock unter bestimmten Arbeitsblätter als auch , aber habe noch nichts gefunden, was funktioniert. Muss ich das betreffende QueryTable im Worksheet-Modul irgendwie dimmen? Irgendwelche Vorschläge oder Gedanken zu dem, was ich vermisse, wären sehr willkommen.
Normalerweise verwende ich * PivotTableUpdate Event * in einem Dummy * Pivot Table * in einem versteckten Dummy-Blatt eingerichtet, um ein Makro zu starten, wenn ein Benutzer die Taste * Alle aktualisieren * drückt. Was deine Frage anbelangt, denke ich, dass es besser ist, die 'WithEvents'-Zeile in * ThisWorkbook * (was du Arbeitsbuch-Modul nennst) zu setzen und dann das Ereignis dort abzufeuern. – L42
Schätzen Sie den Vorschlag - hatte nicht wirklich daran gedacht. Es ist eine Art Workaround und um ehrlich zu sein, habe ich mit dem PivotTableUpdate-Ereignis ein bisschen herumgespielt, aber es war problematisch für meinen Anwendungsfall. Danke für den Vorschlag. – circld