Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8726 / 13646 ツリー ←次へ | 前へ→

【31527】電源のシャットダウン(Windows XP) taka 05/11/24(木) 15:27 質問[未読]
【31532】Re:電源のシャットダウン(Windows XP) ponpon 05/11/24(木) 16:16 発言[未読]
【31533】Re:電源のシャットダウン(Windows XP) Blue 05/11/24(木) 16:35 発言[未読]
【31534】Re:電源のシャットダウン(Windows XP) Kein 05/11/24(木) 16:39 回答[未読]
【31538】Re:電源のシャットダウン(Windows XP) taka 05/11/24(木) 17:32 質問[未読]
【31545】Re:電源のシャットダウン(Windows XP) Kein 05/11/25(金) 12:28 回答[未読]
【31546】Re:電源のシャットダウン(Windows XP) taka 05/11/25(金) 13:14 お礼[未読]
【31549】Re:電源のシャットダウン(Windows XP) Kein 05/11/25(金) 13:54 発言[未読]

【31527】電源のシャットダウン(Windows XP)
質問  taka  - 05/11/24(木) 15:27 -

引用なし
パスワード
   Windows XPを使用していますが、VBAからコンピュータの電源を切れる事は可能でしょうか?
どこをさがしてもコードが分かりませんでした。
何卒宜しくお願いいたします。

【31532】Re:電源のシャットダウン(Windows XP)
発言  ponpon  - 05/11/24(木) 16:16 -

引用なし
パスワード
   こんにちは。

APIを使わないといけないと思います。

参考に

http://homepage1.nifty.com/MADIA/vb/API/VBWINEXIT.htm

【31533】Re:電源のシャットダウン(Windows XP)
発言  Blue  - 05/11/24(木) 16:35 -

引用なし
パスワード
   XpだとSE_SHUTDOWN_NAME特権が必要です。

VBですが類似スレ
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200511/05110132.txt

【31534】Re:電源のシャットダウン(Windows XP)
回答  Kein  - 05/11/24(木) 16:39 -

引用なし
パスワード
   WMIを使うコードでも、出来ることは出来ます。

Sub Win_Off()
  Dim objSystemSet As Object, objSystem As Object
 
  ThisWorkbook.Save
  Set objSystemSet = _
  GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _
  .InstancesOf("Win32_OperatingSystem")
  For Each objSystem In objSystemSet
   objSystem.Win32Shutdown 8
  Next
End Sub

ただ、ブックを閉じずアプリケーションも立ち上げたままの状態で、
OSを終了して電源を OFF にするという処理は、ちょっと抵抗が
ありますねぇ・・。
いちおう上のコードは、VBA実行ファイル用でもあるので、メモ帖に


  Dim objSystemSet, objSystem
 
  Set objSystemSet = _
  GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _
  .InstancesOf("Win32_OperatingSystem")
  For Each objSystem In objSystemSet
   objSystem.Win32Shutdown 8
  Next

とタイプして、拡張子を vbs としたファイルを、デスクトップにでも
保存しておいたら便利でしょう。これは元々、そういう使い方を想定
したコードだからです。

【31538】Re:電源のシャットダウン(Windows XP)
質問  taka  - 05/11/24(木) 17:32 -

引用なし
パスワード
   成功しました。
本当にWindowsが閉じたときは少し感動しました。
ponpn様、blue様、Kein様早速ご回答いただきましてありがとうございました。

Kein様、もう一つ教えてください。以下の部分ですが、これがあるとないのとではどのように違ってくるのでしょうか?また、エクセルを終了させるという点においては
application.quit
を教えていただいたコードの前に記述することではだめでしょうか?

宜しくお願いいたします。

--------------------------------------------------------------
メモ帖に


  Dim objSystemSet, objSystem
 
  Set objSystemSet = _
  GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _
  .InstancesOf("Win32_OperatingSystem")
  For Each objSystem In objSystemSet
   objSystem.Win32Shutdown 8
  Next

とタイプして、拡張子を vbs としたファイルを、デスクトップにでも
保存しておいたら便利でしょう。これは元々、そういう使い方を想定
したコードだからです。

【31545】Re:電源のシャットダウン(Windows XP)
回答  Kein  - 05/11/25(金) 12:28 -

引用なし
パスワード
   >これがあるとないのとではどのように違ってくるのでしょうか
VBS実行ファイルからなら、そのコードの処理によって開いているブックを閉じ、Excel.exeも閉じてから電源をOff出来るので、より安全と思われます。コードは、
VBSファイルがExcelと関係ない実行ファイルなので、Excelのインスタンスが
現在あるかないかを判断(GetObjectでオブジェクト変数に格納)し、あれば閉じる
という方法にします。従って単に Application.Quit などとは出来ません。以下の
ようになります。

Dim xlApp, objSystemSet, objSystem
On Error Resume Next
Set xlApp = GetObject("Excel.Application")
If Not xlApp Is Nothing Then
  xlApp.Save
  xlApp.Quit
  Set xlApp = Nothing
  MsgBox "開いているエクセルは保存処理されました", 64
End If
On Error GoTo 0
Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem")
For Each objSystem In objSystemSet
  objSystem.Win32Shutdown 8
Next

【31546】Re:電源のシャットダウン(Windows XP)
お礼  taka  - 05/11/25(金) 13:14 -

引用なし
パスワード
   kein様

重ね重ね本当にありがとうございました。
非常に助かりました。

【31549】Re:電源のシャットダウン(Windows XP)
発言  Kein  - 05/11/25(金) 13:54 -

引用なし
パスワード
   訂正。
>xlApp.Save

For Each WB In xlApp.Workbooks
  WB.Close True
Next

というように変更しておいて下さい。あと
Dim WB
と、宣言も追加して。

8726 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free