簡體   English   中英

工作和激活多個工作簿的問題 excel VBA

[英]Issues with Working and Activating Multiple Workbooks excel VBA

我在調用和處理多個工作簿時遇到了一些問題。 我有一個宏,可以使用一些數據更新一些 Excel 工作表。 所有這 5 個電子表格都分配了一個帶有文件名和文件路徑的變量。 當我在完成更新后運行第二個 SUB / Macri 以保存並關閉所有 5 個工作簿時 - 即使它們已被分配與前一個宏相同的變量名稱,它也沒有選擇正確的工作簿。 所以我相信我的問題是 - 如果工作簿已經打開,我也無法將變量關聯起來。 - 我假設如果文件名和文件路徑正確,打開的工作簿可以設置為變量,然后可以關閉它們 - 想法?

    Sub CloseWorkbooks()

    Dim MB, WB1, WB2, WB3, WB4, WB5 As Workbook
    Dim FP1, FN1, FN2, FN3, FN4, FN5 As String


    FP1 = "G:\DATA......"

        FN5 = "Book1.xlsx"
        FN2 = "Book2.xlsx"
        FN3 = "Book3.xlsx"
        FN4 = "Book4.xlsx"
        FN1 = "Book5.xlsx"

        Application.DisplayAlerts = False

            Set WB1 = Workbooks.Open(Filename:=FP1 & FN1)
            WB1.Activate
            WB1.Save

            'Application.Wait (Now + TimeValue("00:00:05"))
            WB1.Close


                Set WB2 = Workbooks.Open(Filename:=FP1 & FN2)
                WB2.Activate
                WB2.Save
                'Application.Wait (Now + TimeValue("00:00:05"))
                WB2.Close


                    Set WB3 = Workbooks.Open(Filename:=FP1 & FN3)
                    WB3.Activate
                    WB3.Save
                    Application.Wait (Now + TimeValue("00:00:02"))
                    WB3.Close


                        Set WB4 = Workbooks.Open(Filename:=FP1 & FN4)
                        WB4.Activate
                        WB4.Save
                        Application.Wait (Now + TimeValue("00:00:02"))
                        WB4.Close


                            Set WB5 = Workbooks.Open(Filename:=FP1 & FN5)
                            WB5.Activate
                            WB5.Save
                            Application.Wait (Now + TimeValue("00:00:02"))
                            WB5.Close



End Sub

如果工作表未打開,則此方法有效,但如果工作表已打開,則此方法無效 - 這就是我希望它完成的任務。 上一個宏打開所有工作表並更新它們。 我希望這個宏(上面顯示的第二個)保存並關閉所有工作簿。

-謝謝。

如果您將Workbooks.Open(...)替換為對 this 的調用,它應該在打開時返回工作簿,如果未打開則打開並返回它。

Public Function getWorkbookByFileName(ByVal FileName As String) As Workbook
Dim Book As Workbook: Set Book = Nothing
Dim Count As Integer: Count = Application.Workbooks.Count
Dim Index As Integer: Index = 1
Do
    If Application.Workbooks(Index).FullName = FileName Then
        Set Book = Application.Workbooks(Index)
        Exit Do
    End If
    If Index < Count Then
        Index = Index + 1
    Else
        Exit Do
    End If
Loop
If Book Is Nothing Then
    Set Book = Application.Workbooks.Open(FileName:=FileName)
End If
Set getWorkbookByFileName = Book
End Function

這是相當冗長的,查看檢測 Excel 工作簿是否已經打開的一些答案我看到它可以在不循環工作簿的情況下實現。

這將關閉正確的工作簿。

Sub CloseWorkbooks()
    Application.DisplayAlerts = False

    Dim wb As Workbook
    Dim i As Long

    For i = 1 To 6
        Set wb = Workbooks.Open(Filename:="G:\DATA......Book" & i & ".xlsx")
        Application.Wait (Now + TimeValue("00:00:02"))
        wb.Close SaveChanges:=True
    Next i
Exit Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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