• ベストアンサー

EXCELを開いてマクロを自動起動させるジョブを作りたい

どなたか教えてください。 マクロを組み込んだEXCELを開いてマクロを実行し、クローズするという一連の動作をジョブに組み込みたいと思っています。 これは可能でしょうか?  環境はWindowsです。  EXEファイルなどで実行させるように組み込めるといいのですが、 もし方法があれば教えてください。 よろしくお願い致します。

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

  • ベストアンサー
  • nak777r
  • ベストアンサー率36% (49/136)
回答No.2

OLE オートメーションで出来ると思います 言語が何なのかわからないので、 とりあえず vbスクリプトで説明します 他の言語の場合、その言語でOLEオートメーションを 調べてください 他の言語+ EXCEL.Application で検索すればたいてい出てきます。 事前に C:\ にBook1.xls があるとして その Book1.xls に Macro1() というマクロがあるとして 以下の手順 メモ帳を開き、下記プログラムをコピペ ファイル名を、test.vbs として保存 test.vbs をダブルクリックすると EXCELが立ち上がり、C:\Book1.xls をオープンして Macro1 マクロをコールします。 Dim exApp Set exApp = Wscript.CreateObject("Excel.Application") exApp.Visible = True exApp.Workbooks.Open ("C:\Book1.xls") exApp.Run ("Macro1") exApp.Quit Set exApp = Nothing

momonga_ok
質問者

お礼

ありがとうございます。 正に思っていた事が実現できました。  感謝感謝です。

momonga_ok
質問者

補足

nak777rさん、ありがとうございます。 正に思っていた事が実現できました。  質問ついでと言っては何ですが、よろしければもう1点教えてください。 今回実行したいマクロは複数にわかれていて、その中に引数が必要なものがあります。 Sub Macro1 ・・・ End Sub Sub Macro2(a,b,c) ・・・ End Sub といった感じです。  これをお教えいただいたvbスクリプトにて exApp.Run ("Macro1") exApp.Run ("Macro2") と記述したところ、 エラー「引数省略はできません」と出てしまいます。 また、exApp.Run ("Macro2(a,b,c)") と記述すると、 エラー「マクロ'Macro2(a,b,c)'が見つかりません」となってしまいます。 この部分が解決できれば全てうまくいきそうなのですが・・・。 引数指定の記述方法など解決手段がございましたら是非ご教授ください。 よろしくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.4

>エラー「Sub プロシージャを呼び出すときに、かっこを使うことはできません。」と出ます。  すみません、自宅に環境が無いので、月曜まで確認できませんが call exApp.Run ("Macro2",a,b,c) 又は、 exApp.Run "Macro2",a,b,c と記述してみてください。

momonga_ok
質問者

お礼

exApp.Run ("Macro2"), a, b, c でうまくいきました。 これで万事解決です。  この度は大変お世話になりました。 本当に感謝しています。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • nak777r
  • ベストアンサー率36% (49/136)
回答No.3

>引数指定の記述方法など解決手段がございましたら是非ご教授ください。 やり方は最後に記述しますが、 その前に、オブジェクトブラウザで確認する方法を覚えてください EXCELメニュー [ツール | マクロ | Visual Basic Editor] で EXCEL の Visual Basic Editor を起動 EXCEL の Visual Basic Editor のメニュー [表示 | オブジェクトブラウザ] 全てのライブラリ クラス名 の一覧に Application があるのでそれをクリックすると 右側の一覧が、'Application' のメンバの一覧になります これが、 Set exApp = Wscript.CreateObject("Excel.Application") で指定した exApp のクラスの内容になります。 たとえば、WorkBook に関して何かしたい場合は、 Application クラス の中に、 Workbooks オブジェクトがいるのがわかると思います 今度は、クラス側で、Workbooks クラスを選択すると、Open メソッド又は Addメソッド が存在し、Add は、Workbook を追加、Openは、Bookファイルのオープンメソッドとして存在し、 それぞれのメソッドが、 Workbook を返すメソッドである事は オブジェクトブラウザの下段にある Function Add([Template]) As Workbook という記載を 見ればわかります。 今度は、Workbook のクラスを選択すると、Workbookのメンバーの中に Worksheets のメソッド がある事がわかる・・・と言う風に、クラスの階層わかると思います。 まず、このオブジェクトライブラリの使い方を覚えてください。 で、'Application' の メンバ の一覧の中に Run メソッドがあるので、 それをクリックして、F1キーで Run メソッドのヘルプが表示されます。 その、使用例を見るとわかると思いますが、 exApp.Run ("Macro2",a,b,c) となります。

momonga_ok
質問者

補足

詳細な説明ありがとうございます。  非常によくわかりました。 ただ、その通り定義しているにも拘らずコンパイルエラーになってしまいます。 エラー「Sub プロシージャを呼び出すときに、かっこを使うことはできません。」と出ます。  教えていただいたヘルプの内容を見ながら","の後の空白を調整してみたりしましたがダメでした。  何が悪いのでしょうか? 変数は使えないとかありますか?  

すると、全ての回答が全文表示されます。
回答No.1

バージョンがわからないのですが、昔のEXCELではファイルを開いた時にマクロを自動的に起動することができましたが、2000からは改編されてできないようになっています。 これは当時騒がれたマクロウィルス対策のためです。 現在はマクロを実行する時は「実行ボタン」あるいはマクロ実行呼び出し関数を組み込んでそれを実行することで実行することが必要になります。クローズするというのはエクセル自体をクローズさせることであれば、可能です。 マクロ自体をEXEファイルで実行する事は私も聞いたことがありません。もし、行うとしたら、VisualBasic等でプログラムを作成して、外部からEXCELを操作するといった方法になると思います。 特定のワークブックに組み込んで、そのプログラムを実行する呼び出す形は可能です。 不特定のワークシートに対して、一連の共通したファイル操作を行う事はオブジェクト関数によってシートの値の取得が可能です。 関数についてはVBAのリファレンスマニュアルを参考にしてください。 工夫次第ではかなり楽になりますので頑張ってください。

すると、全ての回答が全文表示されます。

関連するQ&A