【发布时间】:2014-11-17 22:19:37
【问题描述】:
最终,我想在任何人刷新工作簿后运行宏,特别是使用 Excel 中“数据”选项卡下的“刷新”按钮。
目前,我会满足于在按下刷新按钮时触发 BeforeRefresh 或 AfterRefresh QueryTable 事件。
除了微软开发中心网站上的文档,我看过的相关帖子还有:
- 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
我也在特定工作表下尝试了第二个代码块的变体,但还没有找到任何可行的方法。我是否需要在 Worksheet 模块中调暗相关的 QueryTable?
【问题讨论】:
-
我通常在一个虚拟的数据透视表中使用PivotTableUpdate事件,当用户按下全部刷新按钮。至于您的问题,我认为您最好将
WithEvents行放在 ThisWorkbook (您称之为工作簿模块)中,然后在那里触发事件。 -
欣赏这个建议——还真没想到。这是一种解决方法,老实说,我稍微摆弄了 PivotTableUpdate 事件,但发现它对我的用例有问题。感谢您的建议。