首页 文章

每当打开工作簿时运行vba代码

提问于
浏览
0

我正在编写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'之后放置一个消息框来证明这一点,当它完成时,它会显示带有我想要的工作簿的消息框,而不是打开 . 清除消息框后,将打开工作簿 .

有没有办法让所需的工作簿首先打开或任何其他工作?

2 回答

  • 0

    您可以创建一个在工作簿打开时运行的加载项

    https://msdn.microsoft.com/en-us/library/office/gg597509(v=office.14).aspx

    此工具可能有助于创建添加http://www.andypope.info/vba/ribboneditor.htm

  • 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
    

相关问题