簡體   English   中英

使用 Excel VBA 關閉變量工作簿

[英]Closing Variable Workbook with Excel VBA

我目前有一個單元格范圍,其中包含使用我創建的用戶表單中的文件瀏覽器填充的文件路徑。 這些文件包含我將在“計算器”工作簿的公式中使用的匯率和表格。 我有這個宏來打開選定的工作簿:

For i = 1 To 8
If IsEmpty(ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2)) Then
Else
Workbooks.Open (ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2).Value)

End If
Next I

它使用單元格值來確定要打開的文件。 單元格值是這樣的: U:\Rating Calculators\New2020\Rates\Rates 2018-10-01.xlsx 打開正常。 但是,當我完成整個宏和 go 以關閉打開的工作簿時,出現錯誤。

這是我的代碼:

For i = 1 To 8
If IsEmpty(ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2)) Then
Else
Workbooks(ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2).Value).Close Savechanges:=False
End If
Next I

這不起作用,但是如果我手動輸入文件路徑(沒有 U:/ 文件路徑)然后執行

For i = 1 To 8
If IsEmpty(ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2)) Then
Else
Workbooks("Rates 2018-10-01.xlsx").Close Savechanges:=False
End If
Next I

Close 行有效,但它不是變量,不會關閉宏打開的可能 1 到 8 個文件。 我無法對此進行硬編碼並執行“如果此文件已打開,請關閉它”,因為名稱可能會更改。

有什么簡單的解決方案嗎? 我做不到

Workbooks(right(ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2).Value, 21)).close

因為名稱並不總是“Rates YYYY-MM-DD.xlsx”

ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2).Value返回完整路徑,就像您發布的那樣。 它返回類似於U:\Rating Calculators\New2020\Rates\Rates 2018-10-01.xlsx ,因此當您執行以下操作時:

Workbooks(ThisWorkbook.Sheets("Info & Inputs").Cells(i + 2, 2).Value).Close Savechanges:=False

VBA 認為您正在做類似的事情: Workbooks("U:\Rating Calculators\New2020\Rates\Rates 2018-10-01.xlsx").Close Savechanges:=False

這是錯誤的。 它應該只是打開的工作簿的名稱,而不是完整路徑。

您必須一一關閉每個工作簿。

打開工作簿時,您可以將其分配給定義為Workbook的變量。 像這樣:

Dim wb As Workbook
Set wb = Application.Workbooks.Open(pathtofile)

wb.Close False

問題是您的代碼同時打開多個工作簿,您需要為每個工作簿設置一個變量。

我的建議:

執行循環以關閉所有工作簿,但包含宏 ( ThisWorkbook)的工作簿除外。

Dim wb As Workbook

For Each wb In Application.Workbooks
    If wb.Name <> ThisWorkbook.Name Then wb.Close False
Next wb

希望這可以幫助

暫無
暫無

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

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