[英]Using Excel VBA, how do I keep my original code executing after a 'thisworkbook.close' event in a 2nd workbook?
在Excel 2007中,我有一个包含其他Excel文档列表的工作表,所有这些文档都有自己的VBA。 我的代码打开列表中的第一个工作簿,运行其vba,然后在完成后将其标记为完成,然后打开列表中的下一个工作簿。
除非我让其他工作簿之一使用“ 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”的所有操作,关闭第一个子工作簿,并停止所有VBA执行。
当“子”工作簿的代码包含“ thisworkbook.close”时,是否有人有任何想法如何在“子”工作簿的代码完成后保持“主”工作簿的vba代码运行(已编辑以使问题更清楚)
使用标准的COM处理方式。 使用GetObject(filename)
引用每个工作簿(不是excel.application GetObject(filename)
。 做您想做的事,然后不要在子书中关闭它,而是在母版中将引用set exceldoc = nothing
(这在您set exceldoc = nothing
或到达End Function/Sub
)。 两者都不做,因为这是伏都教编程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.