繰り返し処理中はメッセージを非表示にして閉じる
複数のエクセルファイルを保存しないで閉じる場合は、For Each…Nextですべてのエクセルファイルを1つずつ処理していきます。
この時、Closeメソッドでファイルを閉じるだけでは確認メッセージが表示されるので、Application.DisplayAlertsにFalseを設定して、メッセージ表示を非表示にします。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
'繰り返しで処理対象のエクセルファイル Dim targetExcelFile As Workbook '開いているエクセルファイルを、繰り返し処理で1つずつ閉じる For Each targetExcelFile In Workbooks '処理対象のエクセルファイル名と、VBAのファイル名を比較し、違う時のみ処理を行う If targetExcelFile.Name <> ThisWorkbook.Name Then '警告メッセージを表示しない Application.DisplayAlerts = False 'ファイルを閉じる targetExcelFile.Close '警告メッセージを表示 Application.DisplayAlerts = True End If Next |
解説
VBAが記述されているエクセルファイル自体が途中で閉じられると、そこで処理が終了してしまいます。
そのため、8行目のIf文で対象ファイルを判定し、VBAが記述されているエクセル以外を1つずつ閉じています。
また、ファイルに変更があった場合に確認メッセージが表示されないように、ファイルを閉じる直前でApplication.DisplayAlerts = Falseとしています。
ファイルを閉じた直後に、Application.DisplayAlerts = Trueとしメッセージが表示されるように戻しています。これは、他の警告メッセージまで表示されなくなると困るからです。
POINT
エラーが発生した時や、読み取りだけした時は、間違って上書き保存したくないので今回のようにファイルを保存しないで閉じます。