[英]Running vba code whenever a workbook is opened
我正在編寫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”之后放置一個消息框來證明了這一點,完成此操作后,它將顯示該消息框以及我想要的工作簿,而不是打開的。 清除消息框后,然后打開工作簿。
有什么方法可以使所需的工作簿首先打開,或者是否可以進行其他任何處理?
您可以創建一個在工作簿打開時運行的加載項
https://msdn.microsoft.com/en-us/library/office/gg597509(v=office.14).aspx
此工具可能有助於在http://www.andypope.info/vba/ribboneditor.htm中創建“添加”
您應該能夠使用Application.OnWindow事件在打開或關閉文件時觸發宏。
在本工作簿中
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.