確認してPCをシャットダウンする
保存漏れを確認してから、ローカルPCに強制終了オプションなしでシャットダウンを要求します。
実行前に確認
- 実際にPCが終了する危険度の高い例です。他アプリの未保存内容はこのコードで検査できません。
- /fは付けません。/tを正の秒数に変えると/fが暗黙に有効になるため、待ち時間を付けるつもりで変更しないでください。
- 公式仕様とコードを照合した例です。Excel実機での実行は未検証です。業務ブックではなくコピーで試してください。
1サンプルコード
Option Explicit
Sub PracticeAdvanced8007()
Dim wb As Workbook, exePath As String, taskId As Double
For Each wb In Application.Workbooks
If Not wb.Saved Then
MsgBox "未保存のExcelブックがあります: " & wb.Name
Exit Sub
End If
Next wb
exePath = Environ$("SystemRoot") & "\System32\shutdown.exe"
If Len(Environ$("SystemRoot")) = 0 Or Dir$(exePath) = "" Then
MsgBox "Windowsのshutdown.exeが見つかりません。": Exit Sub
End If
If MsgBox("このPCの電源を今すぐ切ります。" & vbCrLf & _
"他のアプリもすべて保存し、PCを終了してよいことを確認しましたか?" & vbCrLf & _
"[はい]の後に取り消し猶予はありません。", _
vbYesNo + vbCritical + vbDefaultButton2) <> vbYes Then Exit Sub
On Error GoTo Failed
taskId = Shell("""" & exePath & """ /s /t 0", vbNormalFocus)
Exit Sub
Failed:
MsgBox "シャットダウン要求に失敗しました: " & Err.Description
End Sub図で見る操作の流れ
イメージ図準備、実行する操作、確認する結果の順で示しています。
準備
Windowsの自分のPCで、すべての作業を保存してから読む例です。練習時は確認で必ず[いいえ]を選びます。
操作
保存漏れを確認してから、ローカルPCに強制終了オプションなしでシャットダウンを要求します。
結果
[いいえ]なら何も変わりません。[はい]ならWindowsへ終了を要求します。権限や未保存アプリによりWindows側で停止・確認される場合があります。
実際にPCが終了する危険度の高い例です。他アプリの未保存内容はこのコードで検査できません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[標準モジュール]へ、この例だけを貼り付けます。
- 2
Windowsの自分のPCで、すべての作業を保存してから読む例です。練習時は確認で必ず[いいえ]を選びます。
- 3
本当に終了する場合のみPracticeAdvanced8007を実行して[はい]を選びます。
- 4
[いいえ]なら何も変わりません。[はい]ならWindowsへ終了を要求します。権限や未保存アプリによりWindows側で停止・確認される場合があります。