В конечном счете, я хотел бы запустить макрос после того, как кто-нибудь обновит книгу, особенно используя кнопку "Обновить" на вкладке "Данные" в Excel. Однако пока я был бы доволен тем, что запускал события BeforeRefresh или AfterRefresh QueryTable, нажав кнопку "Обновить".
В дополнение к "документации", предлагаемой на веб-сайте Microsoft Dev Center, соответствующие сообщения, которые я прочитал как часть этого исследовательского процесса, включают:
- Excel VBA - функция QueryTable AfterRefresh, которая не вызывается после завершения обновления
- VBA для Excel AfterRefresh Event
- Есть и другие менее полезные или релевантные сообщения, но мне не хватает репутации, чтобы публиковать их здесь.
Мне явно не хватает чего-то важного (и, скорее всего, очевидного). Вот что я до сих пор:
В модулях классов (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
В модуле 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
Я также пробовал варианты второго кодового блока в определенных рабочих листах, но еще не нашел ничего, что сработает. Нужно ли мне как-то смущать вопрос QueryTable в модуле Worksheet? Любые предложения или мысли о том, что мне не хватает, будут с благодарностью.