gpt4 book ai didi

vba - 打开工作簿时,Workbook_Open 处理程序未在加载项中触发

转载 作者:行者123 更新时间:2023-12-04 21:53:35 25 4
gpt4 key购买 nike

我有一个 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

现在,查看代码 Pane 顶部附近 - 有两个下拉菜单。左侧的下拉列表列出了所有可用的事件提供程序和接口(interface)(即 Workbook,因为 ThisWorkbookWorkbook 对象,还有任何 WithEvents 字段和您在该模块中定义的 Implements 接口(interface));选择您的 App field 。

然后,右侧的下拉列表将列出您可以为 App 处理的所有可用事件。 .选择 WorkbookOpen事件,VBE 将自动为您创建一个具有正确签名的过程 stub :
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)

End Sub

在该处理程序过程中,您可以放置​​在 Excel 中打开工作簿时要运行的代码。

关于vba - 打开工作簿时,Workbook_Open 处理程序未在加载项中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49429990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com