當用戶點擊「刷新」/「全部刷新」按鈕時,excel似乎只是爲工作簿中的每個(或選定的)查詢表調用刷新方法。但是,爲QueryTable監聽BeforeRefresh和AfterRefresh事件並不能幫助我,因爲我需要在工作簿中的QueryTables(分別在所有選定的QueryTables之後)更新全部後執行一些內容。在excel中收聽刷新事件
有沒有辦法做到這一點?也許它可能以某種方式聽取點擊該刷新按鈕上的鼠標?
當用戶點擊「刷新」/「全部刷新」按鈕時,excel似乎只是爲工作簿中的每個(或選定的)查詢表調用刷新方法。但是,爲QueryTable監聽BeforeRefresh和AfterRefresh事件並不能幫助我,因爲我需要在工作簿中的QueryTables(分別在所有選定的QueryTables之後)更新全部後執行一些內容。在excel中收聽刷新事件
有沒有辦法做到這一點?也許它可能以某種方式聽取點擊該刷新按鈕上的鼠標?
我不使用VSTO但我會調查:
AfterRefresh
事件的全局變量(或工作簿屬性)調用過程您也可以每次檢查Success
參數,以便只有在所選QT全部成功更新時才能運行您的代碼。
其實這就是我打算如何完成這一目標。但這裏有一個問題。假設QueryTables的總數是10.並且可以說用戶剛剛選擇了一個QueryTable,然後按下了「全部刷新」。所以,我的算法首先檢查選擇的QueryTables的數量是1.因此,我的計算將在1次刷新後開始,這是錯誤的。
在此期間,我嘗試訪問功能區中的「刷新」按鈕。但它沒有解決。出於某種原因,我的代碼沒有做任何事情......
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
編輯:我忘了我的登錄數據,所以我創建了一個新的帳戶