質問 |
||
| 質問者:momonga_ok | EXCELを開いてマクロを自動起動させるジョブを作りたい | |
|---|---|---|
困り度:
|
どなたか教えてください。 マクロを組み込んだEXCELを開いてマクロを実行し、クローズするという一連の動作をジョブに組み込みたいと思っています。 これは可能でしょうか? 環境はWindowsです。 EXEファイルなどで実行させるように組み込めるといいのですが、 もし方法があれば教えてください。 よろしくお願い致します。 |
|
質問投稿日時:08/03/25 22:52 質問番号:3894709 |
||
回答 |
|
| 回答者:nak777r | >エラー「Sub プロシージャを呼び出すときに、かっこを使うことはできません。」と出ます。 すみません、自宅に環境が無いので、月曜まで確認できませんが call exApp.Run ("Macro2",a,b,c) 又は、 exApp.Run "Macro2",a,b,c と記述してみてください。 |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/28 23:37 回答番号:No.4 |
|
| この回答へのお礼 | exApp.Run ("Macro2"), a, b, c でうまくいきました。 これで万事解決です。 この度は大変お世話になりました。 本当に感謝しています。 ありがとうございました。 |
回答 |
|
| 回答者:nak777r | >引数指定の記述方法など解決手段がございましたら是非ご教授ください。 やり方は最後に記述しますが、 その前に、オブジェクトブラウザで確認する方法を覚えてください 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) となります。 |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/28 11:33 回答番号:No.3 |
|
| この回答への補足 | 詳細な説明ありがとうございます。 非常によくわかりました。 ただ、その通り定義しているにも拘らずコンパイルエラーになってしまいます。 エラー「Sub プロシージャを呼び出すときに、かっこを使うことはできません。」と出ます。 教えていただいたヘルプの内容を見ながら","の後の空白を調整してみたりしましたがダメでした。 何が悪いのでしょうか? 変数は使えないとかありますか? |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| 回答者:nak777r | 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 |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/26 18:28 回答番号:No.2 |
|
| この回答への補足 | 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)'が見つかりません」となってしまいます。 この部分が解決できれば全てうまくいきそうなのですが・・・。 引数指定の記述方法など解決手段がございましたら是非ご教授ください。 よろしくお願い致します。 |
| この回答へのお礼 | ありがとうございます。 正に思っていた事が実現できました。 感謝感謝です。 |
回答 |
|
| 回答者:EX-STAR999 | バージョンがわからないのですが、昔のEXCELではファイルを開いた時にマクロを自動的に起動することができましたが、2000からは改編されてできないようになっています。 これは当時騒がれたマクロウィルス対策のためです。 現在はマクロを実行する時は「実行ボタン」あるいはマクロ実行呼び出し関数を組み込んでそれを実行することで実行することが必要になります。クローズするというのはエクセル自体をクローズさせることであれば、可能です。 マクロ自体をEXEファイルで実行する事は私も聞いたことがありません。もし、行うとしたら、VisualBasic等でプログラムを作成して、外部からEXCELを操作するといった方法になると思います。 特定のワークブックに組み込んで、そのプログラムを実行する呼び出す形は可能です。 不特定のワークシートに対して、一連の共通したファイル操作を行う事はオブジェクト関数によってシートの値の取得が可能です。 関数についてはVBAのリファレンスマニュアルを参考にしてください。 工夫次第ではかなり楽になりますので頑張ってください。 |
|---|---|
| 種類:アドバイス どんな人:経験者 自信:自信あり |
|
| |
回答日時:08/03/25 23:19 回答番号:No.1 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |