連携 VB/VBAからShell関数を使い.bat/.vbs/.jsを実行する
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
'************************************************** '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関数の次のステートメントは実行されます。つまり別行動です。 |