• ベストアンサー

エクセルVBAでPCシャットダウン

ネットを検索してたら、PCをシャットダウンさせるというコード Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 1 Next をみつけたので以下のように試してみました。 Sub TEST() Application.OnTime Now + TimeValue("0:05:00"), "PC_ShutDown" End Sub Sub PC_ShutDown() Set objSystemSet = _ GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _ .InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 1 Next End Sub ところが実行すると、ログオフし、画面に、「コンピュータの電源を切ることができます」と表示されるのですが、そこでとまってしまいます。 PCの電源ボタンも長押しないときかなくなります。 自動で電源は切れないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 WMIで、Office は終了して、最後まで動いているのなら、「自動で電源は切れない」というのは、 objSystem.Win32Shutdown 1 引数が違うような気がしますが。 ExitWin  EWX_LOGOFF  = 0 ログオフ  EWX_SHUTDOWN = 1 シャットダウン  ←電源が切れる状態  EWX_REBOOT  = 2 リブート  EWX_FORCE  = 4 強制       ←必要?  EWX_POWEROFF = 8 パワーオフ    ←必要? たぶん、  objSystem.Win32Shutdown 4 + 8 ではないかと思います。 ただ、そのような内容のコードは、かなりデリケートな部分を含んでいますから、終了時の状態を監視せずに、終了することは、避けたほうがよいのではないか、と思います。

merlionXX
質問者

お礼

ありがとうございました。 objSystem.Win32Shutdown 4 + 8 で、完璧に作動しました。 > 終了時の状態を監視せずに、終了することは、避けたほうがよいのではないか、と思います。 はい、普段に使おうとは思っていません。 でも、どういう不具合が考えられるのでしょうか?

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >でも、どういう不具合が考えられるのでしょうか? ご存知だとは思いますが、終了時に、その設定を保存するのは普通ですが、場合によっては、終了時、ダウンロードデータを更新していることがありますね。また、メモリ上に、プロセスを残したり、ネットワークでトラブることがあるようです。たぶん、セキュリティ系の関係じゃないかと思います。起動して何も触らないまま、そのままExitWin することはないわけで、通常のパターン(XP?)なら、問題はないと思うものの、私などは、最後の終了までをメッセージなど何も出ないことを確認しないと、気に掛かるわけです。その監視自体を、マクロで行わせるには、ちょっと荷が重そうです。

merlionXX
質問者

お礼

ご丁寧にありがとうございました。 では、エクセル以外のプログラムはすべて終了したことを確認してから使用したいと思います。 お手数をおかけしました。 ありがとうございます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

実証したわけでは有りませんが >objSystem.Win32Shutdown 1  objSystem.Win32Shutdown 8 かも? http://www.wmifun.net/sample/win32_operatingsystem.html ただアプリケーションの中で、更新後に変更を保存してないものがあったりすると シャットダウン処理が中断してしまったり、 ACPIの設定で出来ないものは有るかもしれません。 WindowXP Pro でしたらコマンドプロンプトの Shutdown をShellで呼び出しても・・ 他のPCのシャットダウンも(一部)出来ますのでお試しあれ。

merlionXX
質問者

お礼

ありがとうございました。 objSystem.Win32Shutdown 8 で通常はOKでしたが、スクリーンセイバー(パスワード付き)が起動していると止まってしまいました。

関連するQ&A

専門家に質問してみよう