我正在寫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'之後放置一個消息框來證明這一點,當這樣做完成後,它會顯示帶有我想要的工作簿的消息框,而不是打開的。消息框被清除後,工作簿隨即打開。
是否有任何方法可以使所需的工作簿首先打開或其他任何解決方法?
您需要的應用程序事件:http://www.cpearson.com/Excel/AppEvent.aspx特別是您想要捕獲應用程序的'WorkbookOpen'事件,該事件將觸發任何工作簿打開。 – Rory
完美,這正是我想要的。 –