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