不完全执行Excel Excel VBAmacros的工作簿

我有6个文件逐个执行macros。 带有VBA代码的第一个文件(主文件)打开剩余的5个文件并启动VBA连锁反应。 第二个文件做macros工作并启动第三个文件的工作,并且一直到第六个文件。

然后第6个文件引用第1个文件的macros(master),它应该closures所有5个工作簿(除了这个1stone)。 第六个工作簿的代码如下所示:

Application.DisplayAlerts = False ThisWorkbook.RefreshAll Workbooks("6th_file.xlsm").SaveAs Filename:= _ "[URL]6th_file_htm.htm" Application.Run ("refresh_tool.xlsm!CloseAll.CloseAll") 

然后它转到:

 Option Explicit Sub CloseAll() Dim wb1 As Workbook Dim wb2 As Workbook Dim wb3 As Workbook Dim wb4 As Workbook Dim wb5 As Workbook Set wb1 = Workbooks("wb1.xlsm") Set wb2 = Workbooks("wb2.xlsm") Set wb3 = Workbooks("wb3.xlsm") Set wb4 = Workbooks("wb4.xlsm") Set wb5 = Workbooks("wb5.xlsm") wb1.Close wb2.Close wb3.Close wb4.Close wb5.Close 

结果是,在该链中运行时,只closures第一个工作簿(refresh_tool,wb2,wb3,wb4和wb5保持打开状态)。

但是,当CloseAll()单独运行时,它可以正常工作并closures所有5个文件(只有refresh_tool保持打开状态)。

我试着先用Workbooks(“…”)来简化它,closures,但是已经尝试了几件事情,结束了上面的代码。

任何人都可以帮忙吗?

这是不行的。 您需要按照其他用户的build议进行操作。

发生了什么事情(仅限于3个工作簿):

i)从refresh_tool运行macros来打开wb1

ii)wb1打开(在refresh_toolmacros的线程中)

iii)从wb1运行macros(在refresh_toolmacros的线程中)

iv)来自wb1的macros正在运行(在用于refresh_tool的线程中的wb1的线程中)

v)wb2打开(在线程中处于线程中,处于refresh_tool中的wb1)

vi)从wb2运行macros(在线程中的wb1macros,在线程中为refresh_tool)

vii)wb2中的macros调用refresh_tool中的macros(在wb2的线程中,wb1中的线程中是refresh_tool)

viii)从refresh_tool开始运行closuresmacros(在wb2的线程中,wb1的线程在refresh_tool的原始线程中)

ix)从refresh_toolclosuresmacrosclosureswb1

这就是问题!!!!!! 这将closureswb1的线程,这将终止刷新工具中closuresmacros的运行。 所以,它从来没有超过第一关。 即使您重新sorting了工作簿的closures方式,此时closures的macros也将在所有工作簿的线程中运行。 无论你closures哪一个结束该工作簿的线程,结束closuresmacros。

你需要做的是在评论中提出的build议,并运行一个主人的所有代码。 或者(我会推荐其他方式),closures工作簿中每个macros的末尾的每个工作簿,如果你觉得你真的必须链接这些:

在wb1中:

 Public Sub openFileandRun() Dim wb As Workbook Set wb = Workbooks.Open("filepath\wb2.xlsm") Application.Run (wb.Name & "!openModule.openFileandRun") Thisworkbook.Close SaveChanges:=False End Sub 

在wb2中:

 Public Sub openFileandRun() Dim wb As Workbook Set wb = Workbooks.Open("filepath\wb3.xlsm") Application.Run (wb.Name & "!openModule.openFileandRun") Thisworkbook.Close SaveChanges:=False End Sub 

等等。

显然,修复模块和子程序的名称以匹配你的。

编辑

或者,您可以从原始主文件中调用“Close_All”。 在第一次打开代码之后,请打电话:

 Public Sub masterRun() Dim wb As Workbook Set wb = Workbooks.Open("filepath\wb1.xlsm") 'Do whatever you are doing to wb1. Call CloseAll End Sub