2013-07-24 75 views
1

當用戶點擊「刷新」/「全部刷新」按鈕時,excel似乎只是爲工作簿中的每個(或選定的)查詢表調用刷新方法。但是,爲QueryTable監聽BeforeRefresh和AfterRefresh事件並不能幫助我,因爲我需要在工作簿中的QueryTables(分別在所有選定的QueryTables之後)更新全部後執行一些內容。在excel中收聽刷新事件

有沒有辦法做到這一點?也許它可能以某種方式聽取點擊該刷新按鈕上的鼠標?

回答

0

我不使用VSTO但我會調查:

  • 創建設置爲0
  • 在每個AfterRefresh事件的全局變量(或工作簿屬性)調用過程
  • 這個過程增加計數器
  • 當計數器達到QueryTables總數(或總選定數量)時,請執行您需要執行的操作並將計數器重置爲0.

您也可以每次檢查Success參數,以便只有在所選QT全部成功更新時才能運行您的代碼。

1

其實這就是我打算如何完成這一目標。但這裏有一個問題。假設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 

編輯:我忘了我的登錄數據,所以我創建了一個新的帳戶