我想这个问题会有很多答案,但没有找到明显的答案。
是否可以将VBA执行传递给另一个工作簿?
我想做的是:将执行从ThisWorbook (WbA)传递到另一个工作簿( WbB,使WbB成为新的ThisWorkook),然后关闭Wb A。
编辑
我真正想做的是.
我正在寻找一种方法来更新我分发给几个人的工作簿,它包含20个工作表+10个代码模块+10个用户表单。
我的当前解决方案
每次打开工作簿(WbA)时,代码将首先检查网络目录中是否有新版本可用。如果是这样,宏建议用户自动下载/保存新的工作簿(WbB)并从WbA导出用户数据。
但是,在此之后,我不得不告诉用户,它现在可以关闭WbA并打开WbB并将数据导入到WbB中。
我更愿意自动化关闭的WbA /打开WbB /导入数据。
发布于 2017-06-28 21:45:53
您可以通过使用Application.OnTime来做到这一点。
WbA.xlsm中的代码:
Sub Macro1()
Application.OnTime Now(), "WbB.xlsm!Macro2"
ThisWorkbook.Close
End SubWbB.xlsm中的代码:
Sub Macro2()
MsgBox ThisWorkbook.Name & " says hello"
End Sub因为应用程序是通过计划的任务调用Macro2的,所以它不再需要打开WbA。
注意:WbB.xlsm甚至不需要在运行Macro1时打开,只要您完全限定了工作簿名称:
WbA.xlsm中的代码:
Sub Macro1()
Application.OnTime Now(), "'C:\Temp\SO_Test\WbB.xlsm'!Macro2"
ThisWorkbook.Close
End SubWbB.xlsm中的代码:
Sub Macro2()
MsgBox ThisWorkbook.Name & " says hello"
End Sub假设WbA.xlsm是运行Macro1时在Excel中打开的唯一工作簿,那么在打开WbB.xlsm并继续执行之前,您可能会在很短的时间内看到一个空的Excel。
发布于 2017-06-28 21:20:24
您只需在代码运行时打开工作簿A,您需要执行的最后一行代码应该是
WorkbookA.Closehttps://stackoverflow.com/questions/44812313
复制相似问题