在excel中收听刷新事件

当用户点击“刷新”/“全部刷新”button时,excel似乎只是调用工作簿中每个(或选定的)QueryTable的刷新方法。 然而,听QueryTable的BeforeRefresh和AfterRefresh事件并不真的帮助我在这里,因为我需要在工作簿中的所有 QueryTables(分别在所有选定的QueryTables后)更新后执行一些东西。

有没有办法做到这一点? 也许它可能以某种方式听取鼠标点击该刷新button?

其实这是我打算如何完成这一目标。 但是这里有一个问题。 可以说,QueryTables的总数是10.并且可以说用户刚刚select了一个QueryTable,然后按下了“全部刷新”。 所以,我的algorithm将首先检查select的QueryTables的数量是1.因此,我的计算将在1次刷新后开始,这是错误的。

与此同时,我试图访问function区中的“刷新”button。 但它没有解决。 出于某种原因,我的代码不会做任何事情…

Public Class ThisAddIn Private Sub ThisAddIn_Startup() Handles Me.Startup AddHandler Globals.ThisAddIn.Application.WorkbookActivate, AddressOf OnWorkbookOpened End Sub Private refrBtn As Office.CommandBarButton Private Sub OnClick(ByVal Ctrl As Office.CommandBarButton, _ ByRef CancelDefault As Boolean) MsgBox("PLS WORK!") End Sub Private Sub OnWorkbookOpened(wb As Excel.Workbook) Try refrBtn = CType(wb.Application.CommandBars.FindControl(Id:=459), Office.CommandBarButton) AddHandler refrBtn.Click, AddressOf OnClick Catch ex As Exception MsgBox(ex.Message) MsgBox(ex.GetType) MsgBox(ex.StackTrace.ToString) End Try End Sub End Class 

编辑:我忘记了我的login数据,所以我创build了一个新的帐户

我没有使用VSTO,但我会调查:

  • 创build一个全局variables(或工作簿属性)设置为0
  • 在每个AfterRefresh事件中调用一个过程
  • 这个过程递增计数器
  • 当计数器达到QueryTables的总数(或总的选定数量)时,做你需要做的事情,并将计数器重置为0。

您也可以每次检查Success参数,以便只有在所选QT全部成功更新的情况下,您的代码才能运行。