繁体   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