我有一个Excel加载项,我尝试使用它来插入代码,以便在满足某些条件时自动重命名工作簿。从我们的仓库导出时,所有工作簿都具有相同的名称,导致Excel无法同时打开两个具有相同名称的工作簿'错误一再发生。当用户点击加载项中的按钮时,我已经获得了可以使用的代码,但是我尝试通过将代码放入“TheWorkWorkbook”中来实现相同的功能。插件的一部分似乎不起作用。有没有办法通过加载项执行此操作?
请在下面找到我的代码。
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
答案 0 :(得分:3)
ThisWorkbook
是您的加载项 - 当加载项文件被打开时,其Open
事件会触发,而不是任何工作簿时超越那一点。
您想要的是处理应用程序级事件,更具体地说是WorkbookOpen
事件。向您的WithEvents
模块添加私人ThisWorkbook
字段:
Private WithEvents App As Excel.Application
在Workbook_Open
处理程序中(即启动时),Set
该对象引用:
Private Sub Workbook_Open()
Set App = Application
End Sub
现在,请查看代码窗格顶部附近 - 有两个下拉列表。左侧下拉列表列出了所有可用的事件提供程序和接口(即Workbook
,因为ThisWorkbook
是Workbook
个对象,但也包含WithEvents
个字段和Implements
您在该模块中定义的接口);选择您的App
字段。
然后,右侧下拉列表将列出您可以为App
处理的所有可用事件。选择WorkbookOpen
事件,VBE将自动为您创建一个具有正确签名的过程存根:
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
End Sub
在该处理程序过程中,只要在Excel中打开工作簿,就可以放置要运行的代码。