- ベストアンサー
EXCELのマクロを日時でバッチ起動
EXCEL2000のマクロを日時でバッチ起動しようとしております。 WORKBOOKOPENイベントの使用を考えているのですが、デバッグの際にもマクロが動いてしまうのを避ける方法はあるのでしょうか? ※ 当初、VBSでEXCELを立ち上げマクロをキックしようとしていましたが シートで使用しているEDATE関数が機能しなくなったため断念しました。 OSはWINDOWS200PROです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
現象を理解しました。 こちらでも再現いたしました。 アドインを一度外し、もう一度組み込むと、改善されるっぽいです。 Option Explicit dim xlApp dim xlBook Set xlApp = CreateObject("Excel.Application") 'アドインリフレッシュ Call AddinRefresh(xlApp,"分析ツール") xlApp.Visible = True Set xlBook = xlApp.Workbooks.Open("C:\Test.xls") Call xlApp.Run("Test.xls!init") Private Sub AddinRefresh(inXlsApp,inAddinName) On Error Resume Next inXlsApp.AddIns(inAddinName).Installed = False inXlsApp.AddIns(inAddinName).Installed = True End Sub
その他の回答 (4)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
EDATE 知りませんでした。。。 アドインなら以下のような風に、アドインをインストールしてからブックを開いて、マクロを起動かけたらどうなりますでしょうか? Option Explicit dim xlApp dim xlBook Set xlApp = CreateObject("Excel.Application") xlApp.AddIns("分析ツール").Installed = True xlApp.Visible = True Set xlBook = xlApp.Workbooks.Open("C:\Test.xls") Cal xlApp.Run("Test.xls!テストメソッド")
補足
1050YENさん 教えてくださったコードを組み込んで実行しましたが、 結果に変化はありませんでした。 シートでは以下のようにEDATEを使用しております。 下記、A1("2005年7月"部分)にマクロから日付値を指定することで6ヶ月分計算しています。 A --------- 1 2005年7月 2 =EDATE(A1,1) 3 =EDATE(A2,1) 4 =EDATE(A3,1) 5 =EDATE(A4,1) 6 =EDATE(A5,1) VBEからマクロを実行すると下記のようになります。 A --------- 1 2005年7月 2 2005年8月 3 2005年9月 4 2005年10月 5 2005年11月 6 2005年12月 VBSから「rtncd = objExcel.run("init")とマクロをキックすると 下記のように関数が機能しなくなります。 A --------- 1 2005年7月 2 #NAME? 3 #NAME? 4 #NAME? 5 #NAME? 6 #NAME?
- kikaida-
- ベストアンサー率69% (37/53)
デバッグで開く前にexcelのイベントを無効にすればいいです。 以下、そのやり方です。 application.enableevents=false application.workbooks.open(・・・)
お礼
kikaidaさん、ご回答ありがとうございます。 >application.enableevents=false >application.workbooks.open(・・・) を別のブックに登録しておき、デバッグの際にはそちらから対象ブックを立ち上げるわけですね。 素晴らしいです!ありがとうございます。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
WorkboookのOPENを走らさない方法は知りません。 ただ >当初、VBSでEXCELを立ち上げマクロをキックしようとしていましたがシートで使用しているEDATE関数が機能しなくなったため断念しました。 というのを、解消するヒントは出せるかもしれません。 [ツール(T)]→[マクロ(M)][セキュリティ(S)] を開いて、から以下を読んでください。 セキュリティレベルを「低」になっていますか? また、そのレベルを「低」に変更することは、NGですか? 仮に「低」にしてバッチから実行すると思うような結果が得られませんか? -------------------- ごめんなさい EDATE関数 って知らないのですが、、、 もしかして、オリジナル?
補足
1050YENさん、ご回答ありがとうございます。 EXCELのセキュリティレベルを「低」に変更後保存し、VBSから実行しましたが、うまくいきませんでした。 EDATE関数は[ツール]→[アドイン]から”分析ツール”をチェックすると使えるようになる関数で、日付値から先月を求めるために使用しています。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>デバッグの際にもマクロが動いてしまうのを避ける方法 どのような環境で作業するのか解りませんが・・・。 ○起動時に自身のブック名をチェックして、ブックの名前が変更されていたらOPENイベントをキャンセル(exit) ○特定の名前のブックが起動していたらキャンセル ○単独起動 or 複数のブックが起動していたらキャンセル とか・・・。
お礼
hana-hana3さん、ご回答ありがとうございます。 外部の情報の変化で実行を制御するわけですね。 >起動時に自身のブック名を・・・ を組み込んでみようと思います。
お礼
1050YENさん、つたない質問に最後までお付き合いいただきありがとうございます。 教えていただいたコードからマクロをキックしたところEDATE関数、機能いたしました。 大変勉強になりました。ありがとうございます。