每当打开工作簿时运行vba代码
我正在写vba,它在工作表中操纵数据,但是我试图在工作簿打开时运行它。每当打开工作簿时运行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'之后放置一个messagebox和运行代码),如果是的话运行子。
我已经通过在'else'之后放置一个消息框来证明这一点,当这样做完成后,它会显示带有我想要的工作簿的消息框,而不是打开的。消息框被清除后,工作簿随即打开。
是否有任何方法可以使所需的工作簿首先打开或其他任何解决方法?
每当一个工作簿打开
https://msdn.microsoft.com/en-us/library/office/gg597509(v=office.14).aspx
这个工具可以帮助创建添加在http://www.andypope.info/vba/ribboneditor.htm
完美,这正是我想要的。 –
您应该能够使用应用程序,您可以创建一个加载项运行。 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
您需要的应用程序事件:http://www.cpearson.com/Excel/AppEvent.aspx特别是您想要捕获应用程序的'WorkbookOpen'事件,该事件将触发任何工作簿打开。 – Rory
完美,这正是我想要的。 –