自動化・効率化ならKTパソコンスクール

powerd by うなぎいもプロジェクト

Excel VBAで外部アプリを起動し終了まで待つ方法

カテゴリー │Excel


Excel VBAで外部アプリを起動するにはExcel VBAからUWSCを起動する方法の記事でも紹介しましたが、Shell関数を使う方法があります。ただ、この方法だと外部アプリが終了するまで待つことができないので不都合な時があります。

例えば、Excelのセルからデータを渡してUWSCを起動し、UWSCでなんらかの処理をさせて、それをExcel側に反映させたいとします。

Excelのシートは下の状態だとします。⇓
Excel VBAで外部アプリを起動し終了まで待つ方法

下のtest1プロシージャのようにShell関数を使う方法だと、UWSC側の処理を待たないのでエラーになってしまいます。⇓

'Excel VBAのコード
'A列の数値をtest.uwsに渡してUWSCを起動する
'UWSC.exeとtest.uwsはドキュメントフォルダにあるとする
Sub test1()
Dim myDocuments As String
Dim WSH As Variant
Set WSH = CreateObject("WScript.Shell")
myDocuments = WSH.SpecialFolders("MyDocuments") & "\"

Dim uwscPath As String
Dim filePath As String
Dim args As String

'UWSC.exeのパス
uwscPath = myDocuments & "UWSC.exe"

'起動させたいUWSCのファイルのパス
filePath = myDocuments & "test.uws"

Dim i As Integer
Dim lastrow As Integer
lastrow = Cells(1, 1).End(xlDown).Row

For i = 1 To lastrow
'UWSCに渡す引数
args = Cells(i, 1) & " " & i

Dim ret As Variant
'ファイル名とUWSCに渡す引数を渡してUWSCを起動する
ret = Shell(uwscPath & " " & filePath & " " & args, vbNormalFocus)
Next

MsgBox ("終了しました。")
End Sub

//test.uwsのコード
//受け取った数値に2を掛けて、ExcelのB列に値を設定(この処理自体には意味はありません。)
double = PARAM_STR[0] * 2
EXCEL= getactiveoleobj("Excel.Application")
Excel.cells(PARAM_STR[1], 2) = double


test1プロシージャを実行すると、COMエラーが発生。⇓
Excel VBAで外部アプリを起動し終了まで待つ方法

このようなとき、次のようにすると外部アプリの終了まで待つので意図したとおりにプログラムを実行できます。⇓

'Excel VBAのコード
'A列の数値をtest.uwsに渡してUWSCを起動する
'UWSC.exeとtest.uwsはドキュメントフォルダにあるとする
Sub test2()
Dim myDocuments As String
Dim WSH As Variant
Set WSH = CreateObject("WScript.Shell")
myDocuments = WSH.SpecialFolders("MyDocuments") & "\"

Dim uwscPath As String
Dim filePath As String
Dim args As String

'UWSC.exeのパス
uwscPath = myDocuments & "UWSC\UWSC.exe"

'起動させたいUWSCのファイルのパス
filePath = myDocuments & "UWSC\test.uws"

Dim i As Integer
Dim lastrow As Integer
lastrow = Cells(1, 1).End(xlDown).Row

For i = 1 To lastrow
'UWSCに渡す引数
args = Cells(i, 1) & " " & i

'ファイル名とUWSCに渡す引数を渡してUWSCを起動、終了まで待つ
WSH.Run uwscPath & " " & filePath & " " & args, , True
Next

MsgBox ("終了しました。")
End Sub

test2プロシージャを実行すると、下のようになります。⇓
Excel VBAで外部アプリを起動し終了まで待つ方法


  • このエントリーをはてなブックマークに追加
  • LINEで送る

同じカテゴリー(Excel)の記事


上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Excel VBAで外部アプリを起動し終了まで待つ方法
    コメント(0)