こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelマクロ戻り値をバッチファイルで取得したい

下記のように、Windowsのコマンドプロンプトから
バッチファイル(test.bat)を実行して、
バッチファイルの中から、
VBスクリプトファイル(test.vbs)を実行して、
VBスクリプトファイルの中から、
Excelブック(Book1.xlsm)の中の
main()というマクロを実行させていますが、
以下のことがよく分からないので教えてください。

(問1) Excelマクロmain()の戻り値(result)を、
   VBスクリプトファイル(test.vbs)の中で
   利用したいのですが、Excelマクロからの
   戻り値を取得する方法がよく分かりません。
   例えば、WScript.Echoでresultの値を表示するには、
   どのように記述すればよいのでしょうか。

(問2) Excelマクロmain()の戻り値(result)を、
   バッチファイル(test.bat)の中で
   利用したいのですが、VBスクリプトからの
   戻り値を取得する方法がよく分かりません。
   例えば、echoでresultの値を表示するには、
   どのように記述すればよいのでしょうか。

よろしくお願いします。

---test.bat---------------------------------------
cscript C:\test\test.vbs /A:"C:\test\Book1.xlsm" /B:"main"
(ここでechoなどでresultの値を表示したい)
--------------------------------------------------

---test.vbs---------------------------------------
Dim oApp
Set oApp = CreateObject("Excel.Application")
oApp.Visible = False
Set objParm = WScript.Arguments.Named
oApp.Workbooks.Open objParm("A")
oApp.Run objParm("B")
oApp.DisplayAlerts = False
oApp.Quit
oApp.DisplayAlerts = True
(ここでWScript.Echoなどでresultの値を表示したい)
--------------------------------------------------

---Main() (Excelマクロ)---------------------------
Function main() As Integer
(処理)
 main=result
End Function
--------------------------------------------------

投稿日時 - 2015-07-14 11:24:38

QNo.9012053

困ってます

質問者が選んだベストアンサー

問1の方だけですが
E:\tmp\Book1.xlsm の標準モジュールに
Function ima() As Integer
ima = Second(Now)
End Function
としときます。
VBSの方では

Dim xlApp
Dim XLName
Dim myStr
Set xlApp = CreateObject("Excel.Application")
xlApp.workbooks.open("E:\tmp\Book1.xlsm")
myStr = xlApp.Run("ima")

xlApp.Quit
Set xlApp = Nothing
MsgBox myStr

で取得できましたがBATファイルだと・・・・・・・・・?
先達のご登場を期待しましょう (^_^;)

投稿日時 - 2015-07-15 00:28:57

お礼

教えていただきました方法で、
Excelマクロの戻り値をVBスクリプトで取得することができました。

また、WScript.Quit()とerrorlevelを使うことで、
VBスクリプトの戻り値をバッチファイルで取得することができることが分かりました。

ありがとうございました。

---test.bat---------------------------------------
cscript test.vbs /A:"C:\test\Book1.xlsm" /B:"main"
@echo %errorlevel%
--------------------------------------------------

---test.vbs---------------------------------------
Dim oApp
Dim myStr
Set oApp = CreateObject("Excel.Application")
oApp.Visible = False
Set objParm = WScript.Arguments.Named
oApp.Workbooks.Open objParm("A")
myStr=oApp.Run(objParm("B"))
oApp.DisplayAlerts = False
oApp.Quit
oApp.DisplayAlerts = True
WScript.Quit(myStr)
--------------------------------------------------

投稿日時 - 2015-07-17 08:34:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問