按下刷新或刷新全部按钮后如何调用宏?

cir*_*cld 13 excel vba

最后,我希望在任何人刷新工作簿后运行一个宏,特别是使用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,它将更可重用.