作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
事件。添加私有(private) 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
接口(interface));选择您的
App
field 。
App
处理的所有可用事件。 .选择
WorkbookOpen
事件,VBE 将自动为您创建一个具有正确签名的过程 stub :
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
End Sub
关于vba - 打开工作簿时,Workbook_Open 处理程序未在加载项中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49429990/
我是一名优秀的程序员,十分优秀!