簡體   English   中英

打開工作簿時,Workbook_Open處理程序不在加載項中觸發

[英]Workbook_Open handler not firing in add-in when opening workbooks

我有一個Excel加載項,我嘗試使用它來插入代碼,以便在滿足某些條件時自動重命名工作簿。 從我們的倉庫導出時,所有工作簿都具有相同的名稱,導致“Excel無法同時打開兩個同名的工作簿”錯誤一次又一次地發生錯誤。 當用戶單擊加載項中的按鈕時,我已經獲得了代碼,但是我嘗試通過將代碼放在加載項的“ThisWorkbook”部分中來做同樣的事情似乎不起作用。 有沒有辦法通過加載項執行此操作?

請在下面找到我的代碼。

Private Sub Workbook_Open()
  Dim wbPath As Variant, wbNewname As Variant, newPath As Variant, wbname As Variant
  Dim fileExtension As Variant

  If ActiveWorkbook.Name Like "SR.*" Or ActiveWorkbook.Name Like "SR (#).*" And Application.ActiveWorkbook.Path Like "*Content.IE5*" Then

    Excel.Application.DisplayAlerts = False

    wbname = ActiveWorkbook.Name

    fileExtension = Right(wbname, Len(wbname) - InStrRev(wbname, ".") + 1)

    wbPath = Application.ActiveWorkbook.Path

    wbNewname = "SR" & Int((465480 - 1 + 1) * Rnd + 838588)

    newPath = wbPath & "\" & wbNewname & fileExtension

    ActiveWorkbook.SaveAs Filename:=newPath

    Excel.Application.DisplayAlerts = True

    Set wbPath = Nothing
    Set wbNewname = Nothing
    Set newPath = Nothing
    Set wbname = Nothing
    Set fileExtension = Nothing

  End If

End Sub

ThisWorkbook是您的加載項 - 當加載項文件被打開時,它的Open事件會觸發,而不是在超出該點時打開任何工作簿。

您想要的是處理應用程序級事件,更具體地說是WorkbookOpen事件。 將一個私有的WithEvents字段添加到ThisWorkbook模塊:

Private WithEvents App As Excel.Application

Workbook_Open處理程序中(即在啟動時), Set該對象引用:

Private Sub Workbook_Open()
    Set App = Application
End Sub

現在,看看代碼窗格的頂部附近 - 有兩個下拉菜單。 左側下拉列表列出了所有可用的事件提供程序和接口(即Workbook因為ThisWorkbookWorkbook對象,還有您在該模塊中定義的任何WithEvents字段和Implements接口); 選擇您的App領域。

然后,右側下拉列表將列出您可以為App處理的所有可用事件。 選擇WorkbookOpen事件,VBE將自動為您創建一個具有正確簽名的過程存根:

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)

End Sub

在該處理程序過程中,只要在Excel中打開工作簿,就可以放置要運行的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM