最后,我希望在任何人刷新工作簿后运行一个宏,特别是使用Excel中"数据"选项卡下的"刷新"按钮.但是,暂时,只要按下Refresh按钮就可以触发BeforeRefresh或AfterRefresh QueryTable事件.
除了Microsoft开发中心网站上提供的"文档"之外,我在本研究过程中阅读的相关帖子包括:
我显然遗漏了一些重要的东西(很可能很明显).这是我到目前为止:
在类模块下(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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
我也尝试过特定工作表下的第二个代码块的变体,但还没有找到任何有用的东西.我是否需要在Worksheet模块中以某种方式调暗有问题的QueryTable?任何关于我缺少的建议或想法将不胜感激.
Ror*_*ory 15
您实际上没有将查询表连接到类实例.修订了qtclass
Option Explicit
Private WithEvents qt As Excel.QueryTable
Public Property Set HookedTable(q As Excel.QueryTable)
Set qt = q
End Property
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
Run Code Online (Sandbox Code Playgroud)
新的ThisWorkbook代码:
Dim qtevent As qtclass
Private Sub Workbook_Open()
Set qtevent = New qtclass
Set qtevent.HookedTable = ThisWorkbook.Worksheets("Data-Fund").ListObjects(1).QueryTable
End Sub
Run Code Online (Sandbox Code Playgroud)
请注意,这是非常紧密耦合的.如果你要在类中引发事件并声明你的qtevent变量WithEvents,它将更可重用.
| 归档时间: |
|
| 查看次数: |
17998 次 |
| 最近记录: |