VBAで Workbook オブジェクトを Close メソッドを使って閉じようとしたときにエラーメッセージが表示され、閉じることができないケースがあります。
今回は、WorkbookをClose メソッドで閉じるときにエラーが発生した場合の原因・対処方法について徹底的に説明していきます。
Workbook の Closeエラー対処方法
Closeエラー発生原因
ブックに対してCloseメソッドを使うときにエラーになってしまう原因は以下のことが挙げられます。
- ブックを指定するときに拡張子を付けていない
- マクロを実行しているブック(ThisWorkbook)を閉じてしまい、以降の命令が実行されない
- WorkbookオブジェクトとWorkbooksコレクションを間違って使っている
それぞれのエラー原因・対処方法について次の項目で説明していきます。
Closeエラー対処方法
ブックを指定するときに拡張子を付けていない
ブックを指定してCloseメソッドを使うときに、ブック名に拡張子を付けずに指定してしまうことがあります。
つまり、以下のようになります。
正しい : Workbooks(“Book1.xlsx”).Close ←拡張子を付けている
間違い : Workbooks(“Book1”).Close ←拡張子を付けていない
また、エクセルファイルの場合は拡張子が「.xlsx」「.xlsm」「.xls」等の数種類が存在します。
当然、拡張子を間違って記述したらエラーになってしまいますので注意が必要です。
マクロを実行しているブック(ThisWorkbook)を閉じてしまい、以降の命令が実行されない
ブックは3種類に大別できます。
- マクロを実行しているブック:ThisWorkbook
- 現在作業対象のブック:ActiveWorkbook
- 上記2種類に該当しないブック
もし、何かのブックをCloseする前に、マクロを実行しているブック(ThisWorkbook)をCloseしてしまったら、ThisWorkbookをCloseした以降のマクロが実行されなくなります。
したがって、CloseしたいブックをCloseする前にThisWorkbookを閉じないようにするこことが必要です。
WorkbookオブジェクトとWorkbooksコレクションを間違って使っている
WorkbookオブジェクトとWorkbooksコレクションでは、Closeメソッドで使用できる引数が異なります。
Workbookオブジェクト: expression.Close(SaveChanges, FileName, RouteWorkbook)
Workbooksコレクション: expression.Close
Workbookオブジェクトでは引数「SaveChanges」でブックに変更がある場合の保存等の指定ができますが、Workbooksコレクションを扱うときには引数を使って保存等をすることができません。
もしWorkbooksコレクションで上書き保存をしたい場合には、以下のサンプルコードのようにします。
サンプルコード:
Sub 上書き保存()
For Each wb In Workbooks
wb.Close SaveChanges:=True
Next wb
End Sub
【まとめ】Workbook の Closeエラー対処方法
今回は、ブックをCloseする際のエラー原因・対処方法について解説しました。
エラーが発生する原因は、主に
- ブックを指定するときに拡張子を付けていない
- マクロを実行しているブック(ThisWorkbook)を閉じてしまい、以降の命令が実行されない
- WorkbookオブジェクトとWorkbooksコレクションを間違って使っている
が挙げられました。
VBAでブックを閉じることは頻繁にありますので、ぜひ今回の記事を役立ててくださいね。
参考:Excel VBA入門 その83:シートを別ブックにコピーするとエラーになるときの対処方法
コメント
[…] 参考:Excel VBA入門 その87:Workbook の Closeエラー対処方法 […]