ここから本文です

VBAからVBSを実行してその戻り値を取得したい 【VBA】(引数aを渡してtest.vb...

kit********さん

2016/11/612:54:31

VBAからVBSを実行してその戻り値を取得したい


【VBA】(引数aを渡してtest.vbsを実行)

Dim Sub test1()

a = 10vbsPath = "(パス省略)test.vbs"
Shell "WScript.exe """ & vbsPath & """" & " " & a
End Sub


【VBS】(VBAから受け取った変数aの値に1をプラスして変数cに格納)

set b = WScript.Arguments
c = b
c = c + 1


【やりたいこと】

VBSの実行で得られた変数cの値を戻り値としてVBA側で取得したいのですがどうすればよろしいでしょうか?
初心者なんで色々おかしな点があるかと思いますが、その辺りも突っ込んで頂けますと幸いです。

閲覧数:
4,082
回答数:
3

違反報告

ベストアンサーに選ばれた回答

アバター

ID非公開さん

2016/11/1018:09:54

VBS側は例えば

set b = WScript.Arguments
c = b(0)
c = c + 1
WScript.Quit(c)

のようにして、変数cの値を戻り値として返すようにします。

VBA側は例えば

Sub test1()
Dim a As Long, ret As Long
a = 10
vbsPath = "(パス省略)test.vbs"
ret = CreateObject("Wscript.Shell").Run(vbsPath & " " & a, 0, True)
End Sub

のようにして戻り値を受け取ります。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

Prometheusさん

2016/11/1009:10:09

おやりになりたいことは分かるのですが、エクセルの「VBA」を使っておられるのでしたら、エクセルのセルに値を書き込み、それを「VBScript」側で、読み取れば、結果としては、実現できます。

もちろん、おやりになりたいこととは違うのですが、「必要」であれば、もっと、簡単に考えましょう。

(多分、勉強のためにやっておられるのでしょうから、この回答が答えにはなっていないと思いますが・・・)

プロフィール画像

カテゴリマスター

uso8megaさん

2016/11/614:09:18

Shellは非同期実行なんで、起動したプログラムの
終了待ちを別途 後処理として明示する必要あり。
https://social.msdn.microsoft.com/Forums/ja-JP/0388d210-7eb8-4812-a...

上記対応だとSTILL_ACTIVE[&H103,259]自体を
起動したプログラムから返せない…ので、正直
WScript.Shell.Run辺りを使って終了待ちを明示
した方が楽な気も[少々 環境依存性が出るが]。
http://my-business-adversaria.blogspot.jp/2008/01/vbs_03.html

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる