我正在编写vba来处理工作表中的数据,但是我试图让它在工作簿打开时运行 .
我遇到的问题是,由于工作簿(代码需要运行)每次都不同/新,我需要auto_open代码在个人宏工作簿中 .
Sub Auto_Open()
Dim bookname As String
Dim checkbook As String
Dim Workbook As Workbook
For Each Workbook In Application.Workbooks
bookname = Workbook.Name
checkbook = Left(bookname, 3)
If checkbook = "EDN" Then
Data_generator
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
Application.Quit
Else
End If
Next Workbook
End Sub
当这段代码运行时,它检查所有打开的工作簿并查看它的前3个字母是否为“EDN”,如果是,则运行名为“Data_generator”的公共子,保存并退出 . 如果没有检查下一个打开的工作簿等 .
从Windows资源管理器打开文件时,excel启动(包含所需的工作簿和个人宏工作簿)但是因为excel首先打开个人宏工作簿并在打开所需的工作簿之前运行代码,所以它找不到名为'的工作簿EDN” .
如果上述代码在两个工作簿打开后运行,那么代码按预期工作并循环遍历每个打开的工作簿以查看是否有一个名为“EDN”(这是通过在'then'之后放置一个消息框并运行代码来证明的) ,如果是这样的话 .
我已经通过在'else'之后放置一个消息框来证明这一点,当它完成时,它会显示带有我想要的工作簿的消息框,而不是打开 . 清除消息框后,将打开工作簿 .
有没有办法让所需的工作簿首先打开或任何其他工作?
2 回答
您可以创建一个在工作簿打开时运行的加载项
https://msdn.microsoft.com/en-us/library/office/gg597509(v=office.14).aspx
此工具可能有助于创建添加http://www.andypope.info/vba/ribboneditor.htm
您应该能够使用Application.OnWindow事件在打开或关闭文件时触发宏 .