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