【VBA】時間を指定してPCのシャットダウンを実行する


【タイマー時間を指定してマクロを実行する】
今回はA1セルに時間を入力して
シャットダウンタイマーボタンでマクロを発動します。

ボタンを押したら"タイマーをセットしました"とメッセージが出て
指定した時刻が来たら"pc_shutdown" が実行されます。

Sub btnTimer()
    MsgBox "タイマーをセットしました"
    Dim ShutDownTime As String 'タイマー時刻格納用変数
    'A1に入力された時間を変数に格納
    ShutDownTime = Format(TimerSheet.Range("A1").Value, "hh:mm:ss") 
    'シャットダウン処理を呼び出し
    Application.OnTime TimeValue(ShutDownTime), "pc_shutdown" 
End Sub

Sub pc_shutdown()
    ThisWorkbook.Save
    Dim objsystem As Object'オブジェクト格納用変数
    Set objsystem = CreateObject("WScript.Shell")
    'ログオフするの場合は以下にする
    'objsystem.Run "logoff", 0, False
    'シャットダウンの場合は以下にする
    objsystem.Run "shutdown -s", 0, False
    ThisWorkbook.Close
    Application.Quit
End Sub

【実行結果】

時間がきたらシャットダウンされます。

【シャットダウンか、サインアウトか?】
シャットダウン
objsystem.Run "shutdown -s", 0, False
サインアウト
objsystem.Run "logoff", 0, False

電源を落としたい時はシャットダウンです。
最近ワタシはフルリモート勤務のためPCはシャットダウンではなくサインアウトにしないといけないので業務で使用するPCの場合はサインアウトの方を使用します。

【ちょい足しアレンジが必要】
今回のマクロはあまり通常業務で必要のないマクロかもしれませんが
以下の場合はアレンジが必要だと思います。
・他のアプリケーションが開いていた場合
・実行5分前に通知を出したい
・場合によって実行をキャンセルしたい
など

今回は時間指定で実行するようなコードですが
ワタシは時間がかかるマクロが終了したらシャットダウンも実行されるようにするのもいいかな~と思います。
タイマー機能はシャットダウンでなくても色々使ってみたいです。