簡體   English   中英

使用Excel VBA,如何在第二個工作簿中的“ thisworkbook.close”事件之后使我的原始代碼繼續執行?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM