EXCEL VBA 保存後にWindowsをシャットダウンする方法
問題点
EXCEL VBAで、長時間動かすマクロだと、マクロ終了後にWindowsをシャットダウンして終了させたい時がある。作業開始時間がランダムで、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が終了したと考えてもらったほうがいいです。
オススメ記事
Excel VBA 特定のセルが見えるようにスクロールする方法…
問題点 ExcelのVBAでワークシートのセルに値を入力して…
Excel VBA 列幅 自動調整 一部の列幅、全ての列幅を設定する…
問題点 ExcelのVBAでワークシートの列幅を自動調整した…
Excel VBA セルの色、文字の色 取得方法 条件式の方法…
プログラムの背景 Excel VBAでワークシートのセルの色…
ディスカッション
コメント一覧
まだ、コメントがありません