Excelマクロ戻り値をバッチファイルで取得する方法

このQ&Aのポイント
  • Excelマクロ戻り値をバッチファイルで取得する方法について教えてください。
  • Excelマクロからの戻り値をVBスクリプトファイルやバッチファイルで取得する方法が分かりません。
  • 具体的には、Excelマクロmain()の戻り値をVBスクリプトファイルやバッチファイルで利用したいです。どのように記述すればよいでしょうか。
回答を見る
  • ベストアンサー

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 --------------------------------------------------

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

  • ベストアンサー
回答No.1

問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ファイルだと・・・・・・・・・? 先達のご登場を期待しましょう (^_^;)

yam2012
質問者

お礼

教えていただきました方法で、 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) --------------------------------------------------

関連するQ&A

  • バッチファイルファイル→VBS→エクセル マクロを有効にして起動

    Win/XP エクセル2002使用です。 VBSからエクセルのマクロを有効にして立ち上げたいのですが、 上手くいきません。 バッチファイル側  cd /D c:\  C:\***.vbs  exit /B VBS側 'エクセル起動  Set WshShell = CreateObject("WScript.Shell")  WshShell.CurrentDirectory = "C:\***"  WshShell.Run "C:\***\***.xls",3  WScript.Sleep(5000)  WshShell.SendKeys("E") '←マクロを有効にする  WScript.Sleep(5000)  WshShell.SendKeys("U") '←データソースへのリンクを更新 エクセル側(マクロ)  Sub Auto_open()   Application.OnTime TimeValue("13:00:00"), "Action"  End Sub  Sub Action()    ・・・(省略)・・・  End Sub ----------------------------- また、エクセルマクロは、VBSではなく手動で立ち上げますと、 問題なく時間になった時(13時)に作動します。 VBSのRunメソッドが、 エクセルマクロの Application.OnTime を待たずに走ってしまうことで、 エクセルマクロが無効になってしまっているのではないか? もしくは、データ更新のための sendkey("U")によって マクロが無効になってしまっているのはないか? と思っています。 恐れ入りますが、 よろしくアドバイスの程お願いします。

  • batファイルから起動したscrファイルの戻り値を取得する方法

    DOSのbatファイル上から、ftpのスクリプトを 起動していますが、ftpが失敗した際に戻り値を batファイルに返したいのですが、方法がわからず 困っております。どなたか教えてください。 宜しくお願いします。 test1.bat ftp -s:C:\VB\ftp_test.scr copy 命令 ftp_test.scr open xxx.xxx.xxx.xxx login pass put 命令 quit

  • MSアクセスのマクロ・モジュールを実行

    MSアクセスのマクロ/モジュールを.batバッチファイル、もしくは.vbsのVBスクリプトでキックさせたいと思っています。 こういった方法は可能でしょうか?ぜひ教えて下さい、よろしくお願いします。

  • vbsからのWordマクロ実行

    やりたいこと  vbsからWordマクロを実行し復帰値をMsgBoxで表示する。 問題点  Test関数を実行し復帰値を取得したいのですがコンパイルエラーとなってしまいます。   正しい書き方を教えてください。 Set oApp = CreateObject("Word.Application") oApp.Documents.Open WScript.Arguments(0) Dim code code = oApp.Run Test ★ MsgBox code

  • VBS★Excel★スクリプト★引数の取得

    VBSは初心者というか、やったことがありません。ど素人になります。 説明がとてもぎこちないのもその辺からだと思いますが、宜しくお願いします。 VBのシステムからVBSファイル <内容> Dim wbname Dim mypara Dim file_path Dim oApp file_path = "C:\share\Excel\1234.xls" Set oApp = CreateObject("Excel.Application") oApp.Visible = True On Error Resume Next oApp.UserControl = True oApp.Workbooks.Open "C:\share\Excel\1234.xls" Set oApp = Nothing WScript.Quit を指定して起動すると(1)Excelで作成したシステムが稼動するように作りたいのですが、(1)を起動する環境設定があり、C:\Documents and Settings\MBS\デスクトップ\1111.vbs #CODE #CODEが引数になります。 その#CODEをVBSで取得したいのですが、単体で1111.vbsを動かすとExcelファイルは動きます。 元のシステムではexeファイルしかみないようなのですが、例えば電卓とかメモ帳とかは動きます。vbsファイルだけは動きません。どのようにすれば動くかアドバイスをお願いします。 宜しくお願いします。

  • vbsからバッチファイル実行時の引数渡しについて

    vbsからバッチファイルを実行する時に、引数として変数を渡すことはできるでしょうか。バッチファイルは引数を受け取れる記述をしています。変数の値は常に変動します。 CreateObject("WScript.Shell").Run "C:\HULTOOL\test.bat",0 を使ってtest.batを実行しています。"C:\HULTOOL\test.bat aaa(aaa)は固定の数値ですという書き方で、バッチファイルがaaaを第一引数として受け取れることは試してできました。しかし、aaaを変数にすると成功しません。何かよい記述方法はあるのでしょうか。ご教授ください。

  • ttlで戻り値を取得する方法

    Teratermmacroでローカル(cygwin)に入り、サーバ(HP-UX)にリモートで入った後、 コマンドの戻り値で後の行動を操作したいのですが、うまくいきません。 わかる方、教えていただけませんか。 ざっくり以下のようなマクロを組んでいます。 ---------------------------------------------------------- sendln 'ssh name@host1' wait Prompt sendln 'sendmsg "test"'(のようなコマンド) ←これの戻り値がほしい if 戻り値 = 0 then  ○○ elseif 戻り値 = 1 then  wait Prompt  sendln 'exit'  wait Prompt  sendln 'ssh name2@host2' 以下略 ---------------------------------------------------------- 上記の「戻り値」をどのようにすれば戻り値で判別してくれるでしょうか。 if文の条件式を $?やresultでやりましたが、どのような戻り値でも 必ず$?は0、resultは1で固定でした。 また、sendmsgとif文の間に以下のように試しましたが、失敗しました。 例1: ---------------------------------------------------------- sendln 'echo $?' recvln if inputstr = 0 then ←syntax errorになります。  ○○ elseif inputstr = 1 then ---------------------------------------------------------- 例2:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1247390747参照 ---------------------------------------------------------- sendln 'echo $?' recvln recvln hensu=inputstr ←Type mismatch.のエラーになる。 直前にstr2intを入れたりしても駄目でした。 ちなみにsendln 'echo $?'を挟まずsendmsgの直後にrecvlnでも駄目です。 if hensu = 0 then  ○○ elseif hensu = 1 then ---------------------------------------------------------- host1にシェルスクリプトを入れることは出来ません。

  • VBからBATファイルを起動して戻り値の取得方法

    VBからBATファイルを起動して戻り値(エラーコード)を もらうにはどうすれば良いのでしょうか? WshShellという関数を使用することは、何となく分かるのですが 宜しければサンプルを教えていただけないでしょうか?

  • vbsでexcelのクリアとフォームの表示をしたい

    お世話になっております。 vbsの以下の記述でexcelを開いています。 開くところまでは行くのですが、その後のsheet1のデータのクリアとUserForm1の表示がどうしてもできません。 申し訳ありませんが、どなたかおわかりの方、教えていただけないでしょうか。 宜しくお願いいたします。 Dim oApp Dim objWshShell Dim scriptPath 'Excelオブジェト作成 Set oApp = CreateObject("Excel.Application") 'WScript.Shellオブジェクト作成 Set objWshShell = CreateObject("WScript.Shell") oApp.Visible = True '不可視にする oApp.UserControl = True 'Excelファイルを開く scriptPath = WScript.ScriptFullName scriptPath = left(scriptPath,len(scriptPath)-len(WScript.ScriptName)) oApp.Workbooks.Open scriptPath & "共同資料.xlsm"

  • Excelマクロをwscriptなどで起動したいのですが

    はじめまして。当方、Excelマクロもwscriptも初心者で現在、マクロでできたプログラムを修正するというタスクを与えられているのですが、以下のようなことで困っています。 現在、サーバー上にある\\TEST\200904\a.csvというファイルと1年前のファイル\\TEST\200804\a.csvというファイルをApplication.GetOpenFilename()で指定してもらい、読み込んでマクロが動いているのですが、これをwscriptなどのinputboxに「200904」と入力するだけでこれらのファイルを読み込んで自動的にマクロを動かすということは可能でしょうか?また、wscript、マクロをどのように作成すれば可能でしょうか?ご教授お願い致します。

専門家に質問してみよう