ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示