В конечном счете, я хотел бы запустить макрос после того, как кто-нибудь обновит книгу, особенно используя кнопку «Обновить» на вкладке «Данные» в Excel. Однако пока я был бы доволен только тем, чтобы активировать события BeforeRefresh или AfterRefresh QueryTable, нажав кнопку «Обновить».Как вызвать макрос после нажатия кнопки «Обновить» или «Обновить все»?
В дополнение к «документации», предлагаемых на веб-сайте Microsoft Dev Center, соответствующие должности, которые я прочитал, как часть этого процесса исследования включают в себя:
- Excel VBA - QueryTable AfterRefresh function not being called after Refresh completes
- VBA For 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? Любые предложения или мысли о том, что мне не хватает, будут очень признательны.
Обычно я использую * PivotTableUpdate Event * в манекене * сводная таблица *, созданная в скрытом скрытом листе для запуска макроса, когда пользователь нажимает кнопку * Обновить все *. Что касается вашего вопроса, я думаю, вам лучше положить строку 'WithEvents' в * ThisWorkbook * (то, что вы называете модулем книги), а затем запустить там событие. – L42
Цените предложение - не думал об этом. Это немного обходное решение, и, честно говоря, я немного поиграл с событием PivotTableUpdate, но нашел его проблематичным для моего варианта использования. Спасибо за предложение. – circld