[英]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.