自らのExcelプロセスのみ終了するコード

本ページでは自らのExcelプロセスのみ終了するコードを紹介します。

本マクロの用途

例えば、端末上で毎日起動するExcelマクロがあり、本コードを含まない状態で毎日起動するようタスクスケジューラに登録します。初日は上手く行くかもしれませんが、二日目からは自動起動されないケースが多々あります。

原因は、きれいにプロセスを閉じるよう考慮したコードになっていないためで、自らのプロセスが次回起動時まで残っていることで、次回の呼び出しが失敗するからです。(きれいに書かれたコードの場合問題ないこともあります)

本コードを処理の最後に挿入することで、処理終了時にきれいに自らのプロセスを閉じるようになり、次回起動時に問題なく自動起動されるようになります。

また、以下のようなケースで応用できます。

  • タスクスケジューラには月曜日~金曜日まで自動起動で登録
  • 但し祝日はサーバ側でアプリが起動していないためログインできない
  • 祝日に起動した場合ログイン失敗の状態でプロセスが残るため、次回起動時に失敗する

⇒ログイン判定でログインに失敗した場合に本コードを挿入して自らのプロセスを閉じることで、次回起動時に失敗しなくなります。

本マクロの仕様

マクロファイルを保存せずに閉じ、自ら起動したプロセスを終了させます。本マクロの他にExcelファイルを開いている場合でも、他のExcelファイルに影響を与えずに自らのプロセスを終了させることが可能です。

本マクロの注意事項

本マクロは、単体で動作させるものではなく、毎日起動するマクロをきれいに自動起動させるための部品になります。

マクロの配置やログの出力先、仕様などのその他共通注意事項は当サイトで扱うExcel VBAマクロの共通ルールをご確認下さい。

コード

'#################################################################
'作成日 yyyymmdd
'作成者 wildfish
'更新日 yyyymmdd
'更新者 wildfish
'説明: 自分自身のみ保存しないで閉じる
'    他のBook(Excel)に対しては何もしない
' 他に開いている Book が無い場合のみ Excel も終了する
'#################################################################
With ThisWorkbook

'#################################################################
'他のBookがある場合
'保存したことにして自らのBookを閉じる (実際保存はしない)
'#################################################################
If Workbooks.Count > 1 Then
.Saved = True
.Close False

'#################################################################
'他に開いているBookがない場合
'保存したことにしてExcelを終了する (実際保存はしない)
'#################################################################
Else
.Saved = True
Application.Quit
'Book を閉じる
.Close
End If
End With
'#################################################################

Excel VBAマクロリスト

メニュー

ページのトップへ戻る