Categories: VBA基礎

EXCEL VBA ブックを閉じる(ブック全てを保存して閉じる・変更されていれば保存・保存しないで閉じる)

 

 

EXCEL VBA ブックを閉じる(ブック全てを保存して閉じる・変更されていれば保存・保存しないで閉じる:Close・Saved・Save)

 

 

●はじめに
EXCELを使用していると、EXCELの作業終了後、ブックを閉じる作業を行いますが、その時に、開いているブックを閉じるには、Closeメゾットを使用します。また、ブックデータの状態が、保存後にデータが変更されているかされていないかを調べる時は、WorkBookオブジェクトのSavedプロパティを利用します。なお、EXCELアプリケーションを終了するには、ApplicationオブジェクトのQuitメゾットを利用します。それでは、順番に説明いたします。

●EXCEL VBA EXCELファイル・ワークブック・アクティブシートの保存・上書き保存・選択保存
(SaveAs・GetSaveAsFilename)の方法につきましては、下記のURLを参照にして下さい。

https://akira55.com/saveas/

 

 

●書式の説明  【Closeメゾット】・【Savedメゾット】・【Quitメゾット】

●オブジェクト.Close(SaveChanges,Filename)
※ブックを閉じる時に使用

【SaveChanges】・・・下記参照
【Filename】・・・ブックの保存先を指定

SaveChangesの値及び説明
説明
True①引数:Filename(設定あり)ブックに変更があった場合は、指定されたファイル名で保存される。

②引数:Filename(設定なし)既存ブックは上書き保存される。ただし、新規ブックの場合は、「名前を付けて保存」ダイアログボックスが表示される。また、ブックに変更がない場合は、そのまま閉じる
Falseブック変更を保存しないで閉じる
設定なし(省略)ブックに変更がある場合は、保存するか確認メッセージが表示される

 

記述例:ActiveWorkbook.Close True, “C:\HOZON\TEST_BOOK.xlsm”

説明 :現在開いているワークブックをCドライブの”Hozon”フォルダーの中に「TEST_BOOK.xlsm”」の名前で保存します。

 

●オブジェクト.Saved
※ブックの内容が変更されているか確認

Saved = True ・・・ ブックの内容が変更されている。
Saved = False   ・・・ブックの内容が変更されていない。

 

アプリケーションオブジェクト.Ouit
※EXCELアプリケーションを終了します。

Application.Quit  ・・・EXCELを終了

 

 

EXCELブックを閉じる(Close) 4パターン

 

 

●プログラム説明 (サンプル①~④)

下記のサンプルプログラムは、EXCELブックを閉じる方法を4パターン作成しました。

①アクティブブックを閉じます。[ True ]の場合、変更があれは、同じファイルに保存し閉じます。変更が無ければ、そのまま閉じます。

②アクティブブックを閉じます。[ False ]の場合、変更があってもそのまま閉じます。

③アクティブブックを閉じます。[ 省略 ]の場合、変更があった場合は、保存するか確認メッセージが表示されます。

④アクティブブックの変更が合った場合、別のファイル名で別の場所に保存します。

 

Sub Close01() 'ブックを閉じる①

    ActiveWorkbook.Close True, ActiveWorkbook.FullName
    'アクティブブックを閉じます。[ True ]の場合、変更があれは、同じファイルに保存し閉じます。変更が無ければ、そのまま閉じます。
     
 
End Sub



Sub Close02() 'ブックを閉じる②

    ActiveWorkbook.Close False, ActiveWorkbook.FullName
    'アクティブブックを閉じます。[ False ]の場合、変更があってもそのまま閉じます。
    

End Sub



Sub Close03() 'ブックを閉じる③

    ActiveWorkbook.Close
    'アクティブブックを閉じます。[ 省略 ]の場合、変更があった場合は、保存するか確認メッセージが表示されます。
    

End Sub


Sub Close04() 'ブックを閉じる④

    ActiveWorkbook.Close True, "C:\Hozon\TEST_BOOK2.xlsm"
    'アクティブブックの変更が合った場合、別のファイル名で別の場所に保存します。
    

End Sub

 

 

 

EXCELブックを保存 (Save)【現在のアクティブブックを保存・全てのブックを全て保存】

 

 

●プログラム説明 (サンプル①~②)

下記のサンプルプログラムは、EXCELブックを保存する方法の2パターンを作成しました。

①現在のアクティブブックを保存(Save)します。

②全てのブックを全て保存してEXCELを終了します。

 

 

Sub CloseSave01() '現在のアクティブブックを保存(Save)します

    
    Application.DisplayAlerts = True '保存する際の警告メッセージを無視します。
    
    
    ActiveWorkbook.Save    '現在のアクティブブックを保存(Save)します。
    
    Application.DisplayAlerts = False  '警告メッセージの無視を解除します。
      

    Application.Quit 'EXCELを終了
    
    
End Sub


 

Sub CloseSave02() '全てのブックを全て保存してEXCELを終了します。()

    Dim AllBook As Workbook
    
    Application.DisplayAlerts = True '保存する際の警告メッセージを無視します。
    
        For Each AllBook In Workbooks '開いているワークブック全てをループします。
    
             AllBook.Save    'ワークブック全てを保存(Save)します。
                
        Next AllBook
    
    Application.DisplayAlerts = False  '警告メッセージの無視を解除します。

    Application.Quit 'EXCELを終了

End Sub


 

 

 

EXCELブックの状態確認①【EXCELデータが変更されているか判定します。】

 

●プログラムの説明 (サンプル①) 【Saved】

下記のサンプルプログラムは、現在、開いているEXCELブックが前回保存した状態からデータが変更されているか判定します。

 

Sub Change_Save01() 'EXCELデータが変更されているか判定します。

    If ActiveWorkbook.Saved = True Then
            
            MsgBox "変更されています"  'True :変更が有る場合
            
            ActiveWorkbook.Save    '現在のアクティブブックを保存(Save)します。
        Else
            MsgBox "変更ありません"    'False:変更が無い場合
                
    End If
    
End Sub

 

 

EXCELブックの状態確認② 【複数開いているEXCELデータの内容が変更されているブックを保存します。】

 

 ●プログラムの説明 (サンプル②) 【Saved】

下記のサンプルプログラムは、複数開いたブックから内容が変更されているブックを保存します。現在、開いているEXCELブックが前回保存した状態からデータが変更されているか判定して、ブックを保存した件数をメッセージボックスで表示します。

 

Sub Change_Save02() '複数開いているEXCELデータの内容が変更されているブックを保存します。

    Dim AllBook As Workbook
    Dim I As Long
    
    I = 0
    
    Application.DisplayAlerts = True '保存する際の警告メッセージを無視します。
    
        For Each AllBook In Workbooks '開いているワークブック全てをループします。
        
        
            If AllBook.Saved = True Then
                    AllBook.Save    'EXCELデータの変更されているブックを保存(Save)します.
                    I = I + 1
            End If
                    
        Next AllBook
    
    Application.DisplayAlerts = False  '警告メッセージの無視を解除します。
    
    MsgBox I & "件のEXCELブックを保存しました。"

End Sub


 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA