VBA - 在工作簿上执行宏打开

时间:2018-05-28 09:54:21

标签: excel vba excel-vba

我有3个xlsm工作簿,其中包含一堆宏。当每个工作簿打开时,会向用户显示一个弹出窗口,询问他们是否要执行将运行它们的Call_All宏。如果用户单击是,则执行,如果否,则不执行任何操作。

我这样做的原因是因为我试图尽可能地自动执行管理工作,并尽可能地为用户提供“虚拟证明”。因此,如果我没有弹出窗口询问用户他们想做什么,我只需在“此工作簿”文件中调用Call_All宏,然后在文件打开时 - 即使是要修改某些内容(例如作为代码),整个宏将执行。

现在,我遇到的问题是:

我运行一系列脚本,最后一个脚本打开第一个工作簿,弹出“是/否”。当用户单击此工作簿的“是”时,宏将完美执行。每个工作簿中的最后一个宏打开下一个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 个答案:

答案 0 :(得分:0)

. Look at this resource (about half way down the page: https://exceloffthegrid.com/how-to-run-a-macro-from-another-workbook/

Sub CallAnotherMacro()

Application.Run "'Another Workbook.xlsm'!NameOfMacro"

End Sub

答案 1 :(得分:0)

@Rory在另一篇文章中回答。即使是@Jerry的上述答案,我仍然会收到同样的问题。

这就是原因:

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

@Rory说:

然后我怀疑这是你的问题 - 该代码是您当前正在运行的代码的调用者。如果你结束了,你也结束了被叫代码。我建议你尝试使用Application.OnTime来调用第二个工作簿中的代码,这样第一个代码就可以在工作簿关闭之前完成。

我不能不幸地得到了@Rory对Application.OnTime工作的建议,但是,我发现以下链接解释了原因:

Closing a workbook from an other one without stopping code