← コード一覧へ戻る
実務Excel・Windows連携

確認して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

図で見る操作の流れ

イメージ図

準備、実行する操作、確認する結果の順で示しています。

  1. 準備

    Windowsの自分のPCで、すべての作業を保存してから読む例です。練習時は確認で必ず[いいえ]を選びます。

  2. 操作

    保存漏れを確認してから、ローカルPCに強制終了オプションなしでシャットダウンを要求します。

  3. 結果

    [いいえ]なら何も変わりません。[はい]ならWindowsへ終了を要求します。権限や未保存アプリによりWindows側で停止・確認される場合があります。

実際にPCが終了する危険度の高い例です。他アプリの未保存内容はこのコードで検査できません。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[標準モジュール]へ、この例だけを貼り付けます。

  2. 2

    Windowsの自分のPCで、すべての作業を保存してから読む例です。練習時は確認で必ず[いいえ]を選びます。

  3. 3

    本当に終了する場合のみPracticeAdvanced8007を実行して[はい]を選びます。

  4. 4

    [いいえ]なら何も変わりません。[はい]ならWindowsへ終了を要求します。権限や未保存アプリによりWindows側で停止・確認される場合があります。

使っている機能の公式ドキュメント(Microsoft Learn)