簡體   English   中英

每當打開工作簿時運行vba代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM