代码之家  ›  专栏  ›  技术社区  ›  Eitel Dagnin

vba-打开工作簿时执行宏

  •  1
  • Eitel Dagnin  · 技术社区  · 7 年前

    我有3个XLSM工作簿,里面有一堆宏。当每个宏打开时,都会弹出一个弹出窗口,询问用户是否要执行调用所有宏,该宏将运行所有宏。如果用户单击“是”,则执行;如果单击“否”,则不执行任何操作。

    我这样做的原因,是因为我正在尽可能地自动化管理工作,并使这个过程尽可能为用户提供“虚拟证明”。因此,如果我不弹出窗口询问用户他们想做什么,而只是调用“此工作簿”文件中的调用“所有宏”,那么每当打开该文件时,即使要修改某些内容(如代码),也会执行整个宏。

    我运行一系列脚本,最后一个脚本打开第一个工作簿,弹出“是/否”。当用户单击此工作簿的“是”时,宏将被完美执行。每个工作簿中的最后一个宏将打开下一个XLSM文件,在该文件上再次询问用户是否要执行新工作簿中的宏。然而,这一次它不会执行,绝对不会发生任何事情。当打开下一个XLSM文件时,同样的事情再次发生。

    注意:如果我单独打开每个XLSM文件并单击“是”,则它们工作正常。只有当我打开上一个工作簿中的文件时。

    以下是调用call_all宏的代码(位于“thisworkbook”文件中):

    Private Sub Workbook_Open()
    
        Dim varResponse As Variant
    
        varResponse = MsgBox("Run Macro?", vbYesNo, "Selection")
        If varResponse <> vbYes Then
    
            Exit Sub
    
        Else
    
            Call_All
    
        End If
    
    
    
    End Sub
    

    所有3个工作簿中的代码完全相同。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Jerry    7 年前

    . 查看此资源(大约在页面的下半部分: https://exceloffthegrid.com/how-to-run-a-macro-from-another-workbook/

    Sub CallAnotherMacro()
    
    Application.Run "'Another Workbook.xlsm'!NameOfMacro"
    
    End Sub
    
        2
  •  0
  •   Eitel Dagnin    7 年前

    由@rory在单独的帖子中回答。即使上面有@jerry的回答,我仍然收到同样的问题。

    这就是原因:

    关闭在第二个工作簿中调用代码的第一个工作簿。

    @罗伊说:

    然后我怀疑这就是您的问题——代码是您当前运行的代码的调用者。如果你结束了,你也结束了被调用的代码。我建议您尝试使用application.ontime调用第二个工作簿中的代码,以便第一个代码可以在工作簿关闭之前实际完成。

    不幸的是,我无法获得@rory的应用建议。继续工作,但我找到了下面的链接,解释了原因:

    Closing a workbook from an other one without stopping code