3.5 ワークブックを閉じる
ワークブックを閉じる方法です。???.Closeというメソッドを使います。

???の部分は、自分自身や他のワークブックならThisWorkbookWorkbooks(n)ActiveWorkbookなどのワークブックを表すオブジェクト、全てのワークブックを閉じたい場合はWorkbooksを指定します。詳しくは、2.1 直接指定する方法2.2 間接的に指定する方法をどうぞ。

なお、閉じるときについでに保存も出来ますが、できるだけ保存???.Save???.SaveAsで行い、閉じる(???.Close)は純粋に閉じるだけにしましょう。
閉じる方法
???.Closeの基本的な使い方色々です。自分自身を閉じるとき、他のワークブックを選択して別な名前で閉じるとき、開いているワークブックを全部いっぺんに閉じるの3つの方法があります。

まずは、自分自身を閉じる場合ですが、ThisWorkbookを付け、次のようにします。

ThisWorkbook.Close

しかし、ワークブックは更新されているかもしれません。更新されている場合は、自動で上書き保存した後閉じる場合はSaveChanges:=Trueを指定し、保存せずに閉じる場合はFalseを指定します。

'保存して閉じる場合
ThisWorkbook.Close SaveChanges:=True

'保存せず閉じる場合
ThisWorkbook.Close SaveChanges:=False

なお、この引数を付けない場合はワークブックが更新されていると「変更を保存しますか?」というメッセージが表示されますが、別な方法でメッセージを非表示にすることが可能です。詳しくは、8.2 警告メッセージのON・OFFをどうぞ。


次に、開いている他のワークブックを上書き保存したい場合ですが、まずは対象のワークブックをWorkbooks(n).Activateで選択した後、ActiveWorkbook.Closeで保存する間接指定の方法と、

Workbooks(n).Activate
ActiveWorkbook.Close

Workbooks(n).Close直接ワークブックを指定する方法があります。どちらも同じ動作でどっちを使うかは好みの問題ですが、いちおう後者を推奨しておきます。もちろん、どちらもSaveChanges:=が使えます。

Workbooks(n).Close


ところで、ワークブックは既存の物を開いているとは限りません。Workbooks.Addで新しいワークブックを作り、そこへ編集を加えて閉じる…なんてときは、上書きではなく新しく保存するなので、ファイル名やパスを指定する必要があります。ファイル名の指定はFilename:=で行います。

Workbooks(??).Activate
ActiveWorkbook.Close SaveChanges:=True, Filename:="ファイルのパスとファイル名"

ただし注意が必要で、この方法で指定したファイルには変更があったときだけ保存されます。ワークブックに変更が無かったときは、Filename:=で指定したファイルは変更されません。

最初に、「できるだけ保存???.Save???.SaveAsで行い、閉じる(???.Close)は純粋に閉じるだけにしましょう」と言ったのも、こういったまぎらわしい動作があるからです。


最後に、開いている全てのワークブックを全て閉じる方法です。Workbooks.Closeを使います。

Workbooks.Close

ただし、変更されているワークブックがあると「変更を保存しますか?」のダイアログが表示されてしまいます。これを表示したくないときは、Application.DisplayAlertsで回避しましょう。以下が、その例です。

Application.DisplayAlerts = False
Workbooks.Close
Application.DisplayAlerts = True

詳しくは、8.2 警告メッセージのON・OFFをどうぞ。
使用例1/自分自身を更新せずに閉じる
ThisWorkbook.Closeの使用例です。ワークシートをゴソゴソ編集した後、自分自身を保存しないで閉じ(@)ます。ちなみに、ゴソゴソ…の部分は「5 書式の設定をする」に書いてあるのでここでは省略します…手抜きではありません(汗)

ワークブックは保存しないので、ThisWorkbook.Closeの引数へSaveChanges:=Falseを指定します。

Sub prcThisWorkbookSaveAs()

    '編集範囲を選択します
    Range("B2:D10").Select

    '選択した範囲内のセルを塗りつぶします
    With Selection.Interior
        .ColorIndex = 10
        .Pattern = xlSolid
    End With

    '@ワークブックを保存しないで閉じます
    ThisWorkbook.Close SaveChanges:=False

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
使用例2/他のワークブックを上書き保存して閉じる
ActiveWorkbook.Closeの使用例です。c:\happyに保存してあるエクセル2002.xlsというワークブックを開き、そのワークブックのワークシートをゴソゴソ編集した後、ActiveWorkbook.Close開いたワークブックを上書き保存して閉じ(@)ます。

ワークブックを選択する場合には番号や名前などの識別子を指定する必要があります。例では、開いたワークブックの「名前」を取得し、その名前で選択するようにしています。ちなみに名前の取得ですが、開いた直後は開いたワークブックが選択されている状態なので、この隙にActiveWorkbook.Nameで名前を取得しました。ワークブックの名前取得については、7.3 ワークブックの名前を知る方法もどうぞ。

Sub prcActiveWorkbookSave()

    Dim strWorkBookName As String

    Workbooks.Open Filename:="c:\happy\エクセル2002.xls"
    strWorkBookName = ActiveWorkbook.Name

    'コピー元範囲(自分自身)の指定
    ThisWorkbook.Activate
    Range("B2:D10").Copy

    '開いたワークブックの1つ目のワークシートへ
    'コピーした部分を貼り付けます
    Workbooks(strWorkBookName).Worksheets(1).Range("B2:D10").PasteSpecial

    '閉じるワークブックを選択します
    Workbooks(strWorkBookName).Activate
    '@選択したワークブックを上書き保存し閉じます
    ActiveWorkbook.Close SaveChanges:=True

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
使用例3/新しいワークブックを保存して閉じる場合
ActiveWorkbook.Closeの使用例その2です。Workbooks.Addで新しいワークブックを作り、そのワークブックのワークシートをゴソゴソ編集した後、ActiveWorkbook.Closeワークブックを閉じるときに、ついでに保存(@)します。

ワークブックを閉じるときついでに保存する場合は、Filename:=オプションにファイルのパスとファイル名を指定します。

なお、ワークブックの選択については、「使用例2/他のワークブックを上書き保存して閉じる」と同じです。

Sub prcActiveWorkbookSave2()

    Dim strWorkBookName As String
    
    'まっさらのワークブックを開きます
    Workbooks.Add
    'そのワークブックの名前を取得します
    strWorkBookName = ActiveWorkbook.Name

    'コピー元範囲(自分自身)の指定
    ThisWorkbook.Activate
    Range("B2:D10").Copy

    '開いたワークブックの1つ目のワークシートへ
    'コピーした部分を貼り付けます
    Workbooks(strWorkBookName).Worksheets(1).Range("B2:D10").PasteSpecial

    '閉じるワークブックを選択します
    Workbooks(strWorkBookName).Activate
    '@選択したワークブックを上書き保存し閉じます
    ActiveWorkbook.Close SaveChanges:=True, Filename:="c:\happy\エクセル2002v.xls"

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
訂正情報
2010/12/17
 閉じる方法で示した記述例に誤りがありました。閉じる前にFalse、閉じた後にTrueが正しい内容です。

訂正前
Application.DisplayAlerts = True
Workbooks.Close
Application.DisplayAlerts = False

訂正後
Application.DisplayAlerts = False
Workbooks.Close
Application.DisplayAlerts = True

2011/10/28
 「閉じる方法」段落で、SaveChangesの説明と記述例に誤りがありました。

訂正(以下の説明を削除)
「以下は、更新有無にかかわらずムリヤリ閉じる場合の例です。」

訂正前の記述例
ThisWorkbook.Close SaveChanges:=False

訂正後の記述例
「閉じる方法」段落の記述例の通り

Copyright(C) 1999-2014 結城圭介(Ver.3.51) All rights reserved