連携 VB/VBAからShell関数を使い.bat/.vbs/.jsを実行する

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


'**************************************************
'VB/VBAからShell関数を使い.bat/.vbs/.jsを実行する
'**************************************************

Sub Shellbat()
'**************************************************
'VB/VBAからShell関数を使い.batを実行する
'**************************************************
'注意①~⑥必須
Dim strPath As String
Dim RetVal As Variant

'Shellにパスやアプリケーション名を渡す時には注意!
'-------------------------------------------------
'注意①パスや名前に空白が無い場合は問題ありません
strPath = "C:\Temp\ftptest.bat"
'注意②このような空白があるパスだとエラーになります
strPath = "C:\Documents and Settings\test\デスクトップ\test\ftptest.bat"
'注意③このように取得するパスでもエラーになります
strPath = ThisWorkbook.Path & "\ftptest.bat"
'注意④回避するには["""]~["""]で囲みます
strPath = """C:\Documents and Settings\test\デスクトップ\test\ftptest.bat"""

'タスクID取得及び実行
RetVal = Shell(strPath, 6) 'vbMinimizedNoFocus

If RetVal <> 0 Then
    MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
    MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If

'注意⑤実行は確認出来ますが終了は確認出来ません。
'注意⑥終了を確認するにはAPI関数やWSHを使用する方法しかありません。
End Sub


Sub Shellvbs()
'**************************************************
'VB/VBAからShell関数を使い.vbsを実行する
'**************************************************
'上記注意①~⑥必須
Dim strPath As String
Dim RetVal As Variant

strPath = "C:\Temp\test.vbs"

RetVal = Shell("WScript.exe """ & strPath & """")

If RetVal <> 0 Then
    MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
    MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If

End Sub


Sub Shelljs()
'**************************************************
'VB/VBAからShell関数を使い.jsを実行する
'**************************************************
'上記注意①~⑥必須
Dim strPath As String
Dim RetVal As Variant

strPath = "C:\Temp\test.js"
RetVal = Shell("WScript.exe """ & strPath & """")

If RetVal <> 0 Then
    MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
    MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If

End Sub

'Shell関数(Help抜粋)
'----------------------------------------------------------------
'----------------------------------------------------------------
'プログラムを実行し実行が完了するとプログラムの[タスクID]の値を返す。
'プログラムの実行に問題が発生した場合は[0]を返します。

'構文
'----------------------------------------------------------------
'Shell(pathname[,windowstyle])
'指定項目       省略    内容
'pathname       省略不  実行プログラム名及び
'                       引数名(コマンドラインスイッチ・フォルダ・ドライブ)
'windowstyle    省略可  実行するプログラムのウィンドウの形式値指定(※1)
'                       windowstyleを省略するとフォーカスを持った状態で最小化実行

'(※1)引数[windowstyle]
'----------------------------------------------------------------
'定数               値  フォーカス  内容
'vbHide             0   Focus       非表示
'vbNormalFocus      1   Focus       元のサイズと位置に復元
'vbMinimizedFocus   2   Focus       最小化表示
'vbMaximizedFocus   3   Focus       最大化表示
'vbNormalNoFocus    4   NoFocus     復元
'vbMinimizedNoFocus 6   NoFocus     最小化表示

'注意
'----------------------------------------------------------------
'既定の設定では、Shell 関数はプログラムを非同期的に実行します。
'Shell関数を使用して実行を開始したプログラムが終了しなくても、
'Shell関数の次のステートメントは実行されます。つまり別行動です。

 

 

 

2000年01月01日|[VBサンプルコード]:[連携]