使用Excel VBA,如何在第二个工作簿中的“thisworkbook.close”事件之后保留原始代码?

在Excel 2007中,我有一个包含其他Excel文档列表的表单,所有这些文档都有自己的VBA。 我的代码打开列表中的第一个工作簿,让其vba运行,然后完成时,将其标记为完成,并打开列表中的下一个工作簿。

所有这一切工作正常,除非我让其他workboksclosures本身与'thisworkbook.close'。 这将停止在原始工作簿中运行的VBA以及本身。 如果我评论这一行,这一切都有效,但我宁愿只保留主工作簿和一个子工作簿。

另外,在这种情况下将所有VBA移到主工作簿是不切实际的。

之前的代码是一个高度简化的版本来显示这个问题:

Workbook1的代码:

Sub RunReports() Dim wkb1 As Workbook Dim wks1 As Worksheet Dim lngR As Long Dim strReport As String Set wkb1 = ThisWorkbook Set wks1 = wkb1.Sheets(strDay) For lngR = 4 To 1048576 strReport = wks1.Cells(lngR, 1).Value 'open the report. Its own VBA will take care of everything else Workbooks.Open strReport 'mark the report as complete wks1.Cells(lngR, 2).Value = "done" Next lngR End Sub 

打开工作表中的代码:

 Private Sub Workbook_Open() ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = Now() ThisWorkbook.Save Application.Wait (Now() + TimeValue("00:00:05")) ThisWorkbook.Close End Sub 

如果我注释掉“thisworkbook.close”,它会打开它们,更新打开的时间并保存。 如果没有,它将完成第一个“thisworkbook.close”,closures第一个子工作簿,并停止所有的VBA执行。

有没有人有任何想法如何保持“主”工作簿的VBA代码后,“子”工作簿的代码已经完成,当“子”工作簿的代码包含一个“thisworkbook.close”(编辑,使问题清晰)

使用标准的COM方式做事。 使用GetObject(filename)引用每个工作簿(而不是excel.application GetObject(filename) 。 做你想要的东西,然后不要在子书中closures它,而是在你的主文件中设置任何内容(当你set exceldoc = nothing或者达到End Function/Sub时会发生这种情况)。 不要这样做,因为这是巫术编程。