EXCEL VBA 保存後にWindowsをシャットダウンする方法

eyecatch_465

問題点

EXCEL VBAで、長時間動かすマクロだと、マクロ終了後にWindowsをシャットダウンして終了させたい時がある。作業開始時間がランダムで、1時間以上処理にかかる自動化対応のマクロとかだと終わったらパソコンの電源が切れて欲しいときがあるんですよね。退社時とか寝る前などにしかける時など。

スポンサーリンク

プログラムに関して

プログラムコード本文

465-1
wb.Save
myWSH.Run "shutdown -s -f -t 10", 0, False
Application.Quit
ThisWorkbook.Close
Exit Sub

プログラムの詳細解説

wb.Save

作業中のワークシートを上書き保存します。

myWSH.Run "shutdown -s -f -t 10", 0, False

WSH(Windows Script Host)を読み出し、シャットダウンコマンドをたたきます。この設定ですと、ソフトやアプリがエラーを出したり(「保存しますか」などのミニウィンドウ系など)しても、問答無用に無視して、10秒後に終了する支持となります。なお、WSHは、VBAと近いですが、Windows側にあるスクリプト機能となり、VBAからWSHを呼び出して動作させています。
「-s」がシャットダウンの宣言(「-r」なら再起動)。「-f」がアプリケーションを強制終了する。「-t 10」がコマンド実行までの時間となります(単位は秒)。なお、Excel終了までに時間がかかりExcelエラーなどでどうしても終了しない場合は、10秒を20秒などに変更してもいいです。
10秒後というのがこのプログラムのポイントです。この10秒間は外部プログラムを読み出したとは言え、VBAでは本来できない並列処理をして、VBAが止まった後もシャットダウン処理はいきているいます。

Application.Quit

アプリケーションオブジェクトを終了する宣言をします。これを入れ忘れたり、順番を間違えると、Excelが終了しない場合や、終了してもタスクマネージャーなどで見るとExcelのプロセスが残ったままになります。

ThisWorkbook.Close

使用しているワークシートを閉じる宣言です。

Exit Sub

一応、念のためにプログラム実施のSubも抜けておくことにしています。(プログラム的にはここまで到達しないはずですが)

注意点

「Application.Quit」と「ThisWorkbook.Close」の宣言はプログラムの詳細解説でも少し触れていますが、順番を間違えると、Excelが終了しない場合や、終了してもタスクマネージャーなどで見るとExcelのプロセスが残ったままになります。

感覚的には、「Application.Quit」で終了の予約をしていて、「ThisWorkbook.Close」でシートが閉じたからExcelが終了したと考えてもらったほうがいいです。

オススメ記事

eyecatch_465

EXCEL VBA 保存後にWindowsをシャットダウンする方法…

問題点 EXCEL VBAで、長時間動かすマクロだと、マクロ…

eyecatch_477

Excel VBA 速度アップの方法 高速化…

問題点 ExcelのVBAを処理しているとどうしても他のプロ…

eyecatch_471

Excel VBA 列幅 自動調整 一部の列幅、全ての列幅を設定する…

問題点 ExcelのVBAでワークシートの列幅を自動調整した…


VBAVBA,Excel

Posted by KobeWing