Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » VBAでThisWorkbook以外を閉じる

動作検証バージョン:動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2002 ビルド12527.20194 Microsoft Store)

たくさんのブックを開いているときに、コードの書かれているブック以外のブックをまとめて閉じたい、と感じることがあります。

「VBA Thisworkbook以外のブックを保存しないで閉じる」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスもあります。

[スポンサードリンク]

ThisWorkbook以外を閉じるオブジェクト変数を使ったマクロ

以下のSubプロシージャを実行すると、このコードが書かれているThisWorkbook以外のブックを、上書き保存せずに閉じられます。

Sub ThisWorkbookではないブックを上書き保存せず閉じる()
 Dim bk As Workbook
 For Each bk In Workbooks
  If Not (bk Is ThisWorkbook) Then
   bk.Close SaveChanges:=False
  End If
 Next
End Sub

開いている全ブックに対するFor Each~Next文の中で、
  For Each bk In Workbooks

ThisWorkbookではないときに、
   If Not (bk Is ThisWorkbook) Then

Workbook.Closeメソッドの引数SaveChangesにFalseを指定し、上書き保存しないで閉じています。
    bk.Close SaveChanges:=False

ThisWorkbook以外を閉じるカウンター変数を使ったマクロ

オブジェクト変数が苦手な方の場合、以下のコードのほうが理解しやすいと思います。

Sub ThisWorkbookではないブックを上書き保存せず閉じる_カウンター変数()
  Dim i As Long
  For i = Workbooks.Count To 1 Step -1
   If Workbooks(i).Name <> ThisWorkbook.Name Then
    Workbooks(i).Close SaveChanges:=False
   End If
  Next
 End With
End Sub

ブックを閉じることで、Workbooksコレクションに含まれるWorkbookオブジェクトの数が減ってしまうので、拙著『いちばんやさしいPowerPoint VBAの教本』のLesson 42でもお伝えしているように、For~Nextループを増分値「- 1」(Step -1)で回して、
   For i = Workbooks.Count To 1 Step -1

ブックの名前がThisWorkbookの名前と異なるときに、
   If Workbooks(i).Name <> ThisWorkbook.Name Then

上書き保存せずに閉じています。
    Workbooks(i).Close SaveChanges:=False

先のFor Each~Nextループを使ったSubプロシージャでは、オブジェクト変数について理解できている方向けに、Is演算子の否定を使って判定していましたが、
   If Not (bk Is ThisWorkbook) Then
オブジェクト変数が理解できていない方の場合、
   If Workbooks(i).Name <> ThisWorkbook.Name Then
のように名前で判定するほうが理解しやすいでしょう。

With文を利用したコード

上記のFor~Next文を使ったコードは、With文を使って以下のように書くこともできます。

 With Workbooks
  Dim i As Long
  For i = .Count To 1 Step -1
   If .Item(i).Name <> ThisWorkbook.Name Then
    .Item(i).Close SaveChanges:=False
   End If
  Next
 End With

最終更新日時:2020-03-02 18:02

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » VBAでThisWorkbook以外を閉じる

「Workbooks・Workbook」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.