我正在编写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'之后放置一个消息框并运行来证明的代码),如果是的话,运行sub。
我已经通过在'else'之后放置一个消息框来证明这一点,当它完成时,它会显示带有我想要的工作簿的消息框,而不是打开。清除消息框后,将打开工作簿。
有没有办法让所需的工作簿先打开或者为此进行任何其他工作?
答案 0 :(得分:0)
您可以创建在工作簿打开时运行的加载项
https://msdn.microsoft.com/en-us/library/office/gg597509(v=office.14).aspx
此工具可能有助于创建添加http://www.andypope.info/vba/ribboneditor.htm
答案 1 :(得分:0)
您应该能够在打开或关闭文件时使用Application.OnWindow事件来触发宏。
在ThisWorkbook中
Private Sub Workbook_Open()
Call StartTracking
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopTracking
End Sub
在模块中
Function StartTracking()
Application.OnWindow = "AutoRunOnWindowChange"
End Function
Function StopTracking()
Application.OnWindow = ""
End Function
Function AutoRunOnWindowChange()
If Left(ActiveWorkbook.Name, 3) = "EDN" Then
Call Data_generator
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
Application.Quit
End If
End Function