Excel VBA入門 その87:Workbook の Closeエラー対処方法

エクセルVBA VBA



VBAで Workbook オブジェクトを Close メソッドを使って閉じようとしたときにエラーメッセージが表示され、閉じることができないケースがあります。

今回は、WorkbookをClose メソッドで閉じるときにエラーが発生した場合の原因・対処方法について徹底的に説明していきます。



Workbook の Closeエラー対処方法

Closeエラーの例

Closeエラー発生原因

ブックに対してCloseメソッドを使うときにエラーになってしまう原因は以下のことが挙げられます。

  1. ブックを指定するときに拡張子を付けていない
  2. マクロを実行しているブック(ThisWorkbook)を閉じてしまい、以降の命令が実行されない
  3. 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:シートを別ブックにコピーするとエラーになるときの対処方法

コメント

  1. […] 参考:Excel VBA入門 その87:Workbook の Closeエラー対処方法 […]

タイトルとURLをコピーしました