最后,我希望在任何人刷新工作簿后运行一个宏,特别是使用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) 在我过去后第一次运行在Excel自动刷新数据透视表的数据,我发现,在我第一次执行的查询从外部数据源被刷新,大约需要1分钟来执行.在我的第二次运行中,数据透视表已更新.
是否有解决方案(VBA代码)以刷新两个时间表内外部数据源和数据透视表一起通过点击(如果假设我们设定一个计时器)command button?
建立:
问题描述
使用任何技术的任意组合后,等待Power Query完成刷新,如下面所示的"我尝试过的东西:"部分所述.根据"查询和连接"窗格中显示的刷新指示器(微调器?)图标,可以在Power Query表完成更新之前显示消息框并执行任何其他代码.
上述语句的例外是Application类的"OnTime"方法,如下面的"代码"部分所示,它似乎不会中断电源查询刷新的轮询.但是,此方法的问题在于它使用硬编码的时间来暂停VBA代码,并且这并不总是有效,因为查询的数据的大小,数量和持续时间将随时间而变化.
我尝试过的事情:
码:
Private Sub sht_sub_Refresh_AllConnections_dev()
'Name: sht_sub_Refresh_AllConnections_dev
'Purpose: An attempt at using VBA to wait for Queries to finish updating before displaying a message.
'Description: Waits for a hard coded period of time before dislpaying the message box.
'State: WIP.
'Dev: Needs a way to look at …Run Code Online (Sandbox Code Playgroud)