在另一个excel中运行宏,但在调用的宏完成后无法返回到当前子



ParentExcel.xlsm在ChildExcel1.xlsm和ChildExcel2.xlsm 中具有要调用子的子

//in ParentExcel.xlsm    
Sub ParentSub()
Set runWorkbook = Workbooks.Open(Filename:=mChildPath)
Application.Run runWorkbookName & "!" & ChildSub1
/*Edit*/Set runWorkbook2 = Workbooks.Open(Filename:=mChildPath2)
Application.Run runWorkbookName2 & "!" & ChildSub2
End sub
//in ChildExcel1.xlsm
Sub ChildSub1()
MsgBox "Called ChildSub1"
/*Added*/ThisWorkbook.Close
End sub
//in ChildExcel2.xlsm
Sub ChildSub2()
MsgBox "Called ChildSub2"
/*Added*/ThisWorkbook.Close
End sub

我的问题是,该过程在完成ChildSub1((后停止,并且ChildExcel1.xlsm已关闭。然后我无法执行ParentSub((中的剩余代码

如果关闭代码所在的工作簿(runWorkbook(,则执行将停止(VBA是单线程的,使用ChildSub1中的close语句,运行时将假定您已完成(。

您需要将close语句放入调用例程中——无论如何,调用例程更干净,因为打开工作簿的例程也会关闭它。

请注意,您使用的runWorkbookName在您向我们展示的代码中既没有定义也没有设置。您可以使用以下代码:

Set runWorkbook = Workbooks.Open(Filename:=mChildPath)
Application.Run runWorkbook.Name & "!" & ChildSub1
runWorkbook.Close 
Set runWorkbook2 = Workbooks.Open(Filename:=mChildPath2)
Application.Run runWorkboo2.kName & "!" & ChildSub2
runWorkbook2.Close 

从关闭的工作簿中调用subs,请使用下一种方法。使用他们的全名将调用打开必要的工作簿。如果它们已经打开,代码也会起作用:

Sub ParentSub()
dim mChildPath as string, mChildPath2 as string
mChildPath = "full name of the workbook"         'please fill here the real path
mChildPath2 = "full name of the second workbook" 'the same as above
Application.Run "'" & mChildPath & "'!" & "ChildSub1"
Application.Run "'" & mChildPath2 & "'!" & "ChildSub2"
End sub

现在,进行调用时,必要的工作簿将打开,并由其调用的Sub关闭。。。

最新更新