goo blog サービス終了のお知らせ 

われこわれこ

プログラムじゃあ~りませんか!

Win8(64)のVBAでボタンを押したらタスクマネージャを出したい

2015-05-08 15:43:40 | VBA
Private Sub CommandButton1_Click()

' Excel VBAでボタンを押したらタスウクマネージャーを開きたい
' DOS Commandだと
' %windir%\system32\taskmgr.exe
' あるいは、パスを省略して
' taskmgr.exe
' で出せる。

Dim windir As String
Dim pathFNameTskMgr As String

' まず環境変数 windirを展開して、

windir = Environ("windir")

pathFNameTskMgr = windir + "\system32\" + "taskmgr.exe"
' pathFNameTskMgr = "Taskmgr.exe"

'vbNormalNoFocus 4 '最後にウィンドウを閉じたときのサイズと位置に復元されるフォーカスを持たないウィンドウ。
'現在アクティブなウィンドウは、アクティブのままです


' この文字列pathFNameTskMgrをShell関数で実行する
' Shell "taskmgr.exe", vbNormalNoFocus ' Win8(64)で動かなかった
' Win7(64)なら問題なく成功したのだが。Win8では以下のエラー
' 実行時エラー '5':
' プロシージャの呼び出し、または引数が不正です。
' と出る。原因不明。

' でも不思議な事に、同じ方法で電卓を出す場合はWin8,Win7どちらも成功する。

' Shell "CALC.EXE", vbNormalFocus

' 結局、Win8でShell関数でうまくいかない理由がわからないので、
' 即席で↓の関数を作成して、WScript.Shellを使って実行したらWin7, Win8どちらでも
' うまく行ったぞ。

run_cmd_string (pathFNameTskMgr)

' と言う事で、Win8(64)でShell関数でtaskmgr.exeの実行開始が出来ないのか未解決だが、
'取りあえず↓のWScript.Shell方法で上手く行ったので、良しとするか。

End Sub

Public Sub run_cmd_string(cmdStr As String)
'引数で与えた文字列をWScript.Shellを使って実行する
Const vbHide = 0 'ウィンドウを非表示
Const vbNormalFocus = 1 '通常のウィンドウ、かつ最前面のウィンドウ
Const vbMinimizedFocus = 2 '最小化、かつ最前面のウィンドウ
Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ
Const vbNormalNoFocus = 4 '通常のウィンドウ、ただし、最前面にはならない
Const vbMinimizedNoFocus = 6 '最小化、ただし、最前面にはならない

Dim objWShell
Set objWShell = CreateObject("WScript.Shell")

' 電卓を出す例
' objWShell.Run "%windir%\system32\calc.exe", vbNormalFocus, False

'文字列を実行する。最後のFalseはなんだっけ?
objWShell.Run cmdStr, vbNormalFocus, False

Set objWShell = Nothing
End Sub

最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。