本記事はプロモーションを含みます

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が終了したと考えてもらったほうがいいです。

問題が解決したら、お友達と共有しませんか?

この記事にいっぱいおごってみる?

KOBE WINGのAmazonほしい物リスト

オススメ記事

eyecatch_791

Excel VBA セルの色、文字の色 取得方法 条件式の方法…

プログラムの背景 Excel VBAでワークシートのセルの色…

eyecatch_471

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

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

eyecatch_771

Excel VBA 特定のセルが見えるようにスクロールする方法…

問題点 ExcelのVBAでワークシートのセルに値を入力して…


VBAVBA,Excel

Posted by KobeWing