![](/img/trans.png)
[英]VBA Excel: call a macro on close but not from the Workbook_BeforeClose function?
[英]Excel VBA Close Workbook and Trigger New Macro
我一直在修补这个好几个小时,但我无法弄清楚。 我有一个主工作簿,它启动其他启用宏的模板(生成和保存输出),然后将输出附加到电子邮件。 (我不能将它们全部合并到一个工作簿中,因为选项卡、宏和大小的数量会变得太麻烦)。 由于我正在处理的某些事情的机密性,我无法分享我的确切代码 - 但我已经削减/替换了值并提供了我在下面尝试过的代码的“示例”。
我遇到的问题是试图完成以下任务:
我的问题是,一旦我关闭 SubWB1,MainWB 中的宏就会停止运行……我试过:
1. 尝试 1:在 MainWB 宏中间调用 SubWB1 宏,并执行以下后续步骤:
Sub AfternoonReport () 'macro in MainWB
'do stuff
Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain" 'macro ends with .close, save changes false
'************STOPS HERE***********
Application.Wait Now + TimeValue("00:00:03")
generateEmail 'macro within MainWB
End Sub
2.尝试2:在subWB中宏的末尾调用MainWB中的continuation sub:
Sub AfternoonReport () 'macro in MainWB
'do stuff
Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain"
End Sub
Sub triggerFromMain () 'macro in subWB
'do stuff
Application.Run "'mainWB.xslm'!continueFromSub1"
End Sub
Sub continueFromSub1 () 'macro in MainWB
'do stuff
Workbooks("submacro1.xlsm").Close SaveChanges:=False
'************STOPS HERE***********
Application.Wait Now + TimeValue("00:00:03")
generateEmail 'macro within MainWB
End Sub
3.尝试3:与上面相同的示例,但将subWB分配给mainWB中的公共工作簿对象:
'Declarations in mainWB
Public subWBobj As Workbook
Sub AfternoonReport () 'macro in MainWB
'do stuff
Set subWBobj = Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain"
End Sub
Sub triggerFromMain () 'macro in subWB
'do stuff
Application.Run "'mainWB.xslm'!continueFromSub1"
End Sub
Sub continueFromSub1 () 'macro in MainWB
'do stuff
subWBobj.Close SaveChanges:=False
'************STOPS HERE***********
Application.Wait Now + TimeValue("00:00:03")
generateEmail 'macro within MainWB
End Sub
4.尝试4:从subWB中的BeforeClose事件调用continuation宏
Sub AfternoonReport () 'macro in MainWB
'do stuff
Workbooks.Open FileName:="C:\Users\me\Documents\DailyReport\submacro1.xlsm"
Application.Run "'submacro1.xslm'!triggerFromMain"
End Sub
Sub triggerFromMain () 'macro in subWB
'do stuff
ThisWorkbook.Close SaveChanges:=False
End Sub
Sub Workbook_BeforeClose () 'macro in subWB
Application.Run "'mainWB.xslm'!continueFromSub1"
'********Doesnt allow the workbook to close and just fires macros in the mainWB - causing other issues*******
End Sub
注意:除了上面的示例 4 之外,我没有收到任何错误 - 所以代码没有中断,它似乎只是在“.Close”函数上退出 MainWB 中的宏,因此不是继续任何进一步的代码。
任何建议将不胜感激! 我已经尝试了所有我能想到的方法,但我只能盯着同一行代码看了这么久! :)
停止宏的部分是 subWB 中的.Close
语句。 从 subWB 中删除该行并从 main 中关闭该工作簿:
Option Explicit
Sub AfternoonReport()
Dim msg As String
msg = "Macro executed at " & Format(Now(), "dd-mmm-yyyy hh:mm")
Debug.Print "from mainWB: " & msg
Dim otherWB As Workbook
Set otherWB = Workbooks.Open(Filename:="C:\Temp\submacro1.xlsm")
Application.Run "'submacro1.xlsm'!triggerFromMain" 'macro ends with .close, save changes false
Debug.Print "back from the sub macro and we're done."
otherWB.Close SaveChanges:=False
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.