Google
 
Web itpro-blogger.blogspot.com
金曜日, 8月 28, 2009

[VBA]Shell関数(EXE実行)

▼質問
ExcelでEXEを実行したツールを作りたいんだ。

どうやったらできるか教えてくれ!

▼回答
APIを使った関数を作ったから参考にしてくれ!!

標準モジュールに次のコードをコピーしてから

使ってくれ!!

Option Explicit

Public Const SYNCHRONIZE = 1048576
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const PROCESS_TERMINATE = &H1
Public Const PROCESS_QUERY_INFORMATION = &H400&
Public Const STILL_ACTIVE = &H103&

Public Declare Function OpenProcess Lib "kernel32" _
(ByVal dwAccess As Long, ByVal fInherit As Long, ByVal IDProcess As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32.dll" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32.dll" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Function ShellExec(ByVal pPathName As String) As Boolean

Dim pid As Variant
Dim hProcess As Long
Dim lpExitCode As Long

On Error GoTo doError

pid = Shell(pPathName, vbNormalFocus)

'起動したプログラムのプロセスハンドルを取得
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_QUERY_INFORMATION, True, pid)

'指定のオブジェクトがシグナル状態になるか、タイムアウト時間を経過するまで待機する
WaitForSingleObject hProcess, 100000

'プロセスの終了状態を取得
GetExitCodeProcess hProcess, lpExitCode

'プロセスハンドルのクローズ
CloseHandle hProcess

ShellExec = True

Exit Function

doError:

MsgBox Err.Description

ShellExec = False

End Function

■参考サイト
VB テクニック編13 - バッチ実行、EXE バッチ実行、関連付け実行、文字列置換 - SAK Streets
VB & VBAプログラミング


This page is powered by Blogger. Isn't yours?