Ostatecznie chciałbym uruchomić makro po każdym odświeżeniu skoroszytu, szczególnie za pomocą przycisku Odśwież na karcie Dane w programie Excel. Na razie jednak byłbym usatysfakcjonowany po prostu wywołaniem zdarzeń BeforeRefresh lub AfterRefresh QueryTable po naciśnięciu przycisku Odśwież.Jak wywołać makro po naciśnięciu przycisku Odśwież lub Odśwież wszystko?
Oprócz „dokumentacji” oferowany na stronie internetowej Microsoft Dev Center, odpowiednie posty Przeczytałem jako część tego procesu badawczego należą:
- Excel VBA - QueryTable AfterRefresh function not being called after Refresh completes
- VBA For Excel AfterRefresh Event
- Istnieją inne mniej pomocne lub odpowiednie posty, ale brakuje mi reputacji, aby opublikować je tutaj.
Ja wyraźnie brakuje czegoś ważnego (i najprawdopodobniej oczywistego). Oto co mam do tej pory:
Pod Class Modules (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
ramach modułu ThisWorkbook
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
próbowałem odmiany drugim bloku kodu w określonych arkuszach, jak również , ale jeszcze nie znalazłem niczego, co działa. Czy muszę w jakiś sposób przyciemnić kwestionowaną tabelę QueryTable w module Arkusz roboczy? Wszelkie sugestie lub przemyślenia na temat tego, czego mi brakuje, będą bardzo mile widziane.
Zwykle używam * zdarzenia PivotTableUpdate * w atrapie * tabeli przestawnej * ustawionej w atrapie ukrytego arkusza, aby odpalić makro, gdy użytkownik naciśnie przycisk * Odśwież wszystko *. Jeśli chodzi o twoje pytanie, myślę, że lepiej jest umieścić linię 'WithEvents' w * ThisWorkbook * (to, co nazywasz modułem ze skoroszytu), a następnie wystrzelić tam wydarzenie. – L42
Doceniam sugestię - naprawdę o tym nie myślałem. Jest to trochę obejście i, szczerze mówiąc, trochę pokłóciłem się z wydarzeniem PivotTableUpdate, ale okazało się, że jest to problematyczne dla mojego przypadku użycia. Dzieki za sugestie. – circld