我有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个工作簿中的代码完全相同。
答案 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的上述答案,我仍然会收到同样的问题。
这就是原因:
关闭第二个调用代码的第一个工作簿。
然后我怀疑这是你的问题 - 该代码是您当前正在运行的代码的调用者。如果你结束了,你也结束了被叫代码。我建议你尝试使用Application.OnTime来调用第二个工作簿中的代码,这样第一个代码就可以在工作簿关闭之前完成。
我不能不幸地得到了@Rory对Application.OnTime工作的建议,但是,我发现以下链接解释了原因: