- ベストアンサー
エクセル2003VBA 所定の時刻にVBAを自動で作動
エクセル2003のVBAなのですが、 「所定の時刻に自動でマクロが動き出す」と言う事は可能でしょうか? もし、可能であれば、参考になるHPや、VBAの記述の仕方など 教えていただけないでしょうか。 自動で動かしたいVBAの概要として、 他のエクセルファイルをオープンして データーを取得、記述、 保存 と言うVBAになっております。 これを1日1回、更新をかけたいのですが、自動でできるのであれば 自動化したいと思っています。 ご回答のほど宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> コードはメモ帳に記述すればよいのでしょうか? はい。バッチファイルのようなもんです。 Windowsが内容を解釈して実行してくれます。 C ドライブの中を 拡張子 VBS で検索するとかなり出てきます。 色々な自動化に使われています。 >動作をさせるファイルはサーバー機にファイルがあるのですが、 >そうすると、VBSコードはサーバー機に保存して、設定もサーバー機 >にしないといけないと言う事ですか? いいえ。 VBS ファイルはクライアントに置いて大丈夫です。 xlsファイルへのフルパス を \\srver1\arekore\that.xls の様に UNC名で記述して下さい。 サーバー機への設定は不要です (もしかしたら共有フォルダのアクセス権で引っかかるかも知れません) (サーバーの OS が Linux だったら・・分かりません) 以下、蛇足ですが WSH(VBS)を理解するうえで役に立つと思われるリンク Windows Script Host Laboratory http://wwwroy.hi-ho.ne.jp/mutaguchi/wsh/wshtop.htm Hey, Scripting Guy! http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/default.mspx ヘルプドキュメント(Script56.chm)は本家から (パッケージになってますので適当な所へインストールして下さい) http://www.microsoft.com/japan/msdn/scripting/
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 もしかしたら、インターネットを経由してWebサイトからのデータ取得ではありませんか? 株価や為替レート取得などです。 いままで、ここの掲示板で、似たような質問はあったものの、前の人たちは、どうしていたかというと、Excelを開きっぱなしにして、zap35さんのご回答のように、OnTime メソッドを使っていました。 今回、私は試してみましたが、こちらでは、成功しました。理屈では分かっていたのですが、やってみると、細かい部分が分かっていませんでした。 文章があまり良くまとまっていませんが、分からなかったら、再度、質問お願いします。 ------------------------------------------ まず、 「タスク」に設定して、Excelの特定のブックを開くようにすれば出来ます。 後は、VB Editor のThisWorkbook モジュールに、Workbook_Open イベントを設定しておけばよいと思います。 「タスク」は、 コントロールパネルから、[パフォーマンスとメインテナンス]を選び、 タスクを選択してください。 [スケジュールされたタスクの追加]で、ブック名を指定して、ウィザードにご希望どおり入れていってください。 なお、タスクの設定方法は、 http://www.accessclub.jp/samplefile/help/help_220_1.htm ここをごらんください。ただし、こちらは、[XP SP2] ですが、少し内容が違っています。 # クリックすると、パスワード入力が求められます。 の部分は、そういう設定をしてしまうと、こちらではエラーが発生してうまく実行できません。 一旦パスワード設定なしに、タスクの設定が終わった後に、プロパティのタスクの □ ログオンしている部分にのみ実行する([実行する]がオンに... □ 実行する(スケジュールされたタスク...) 両方にチェックを入れてください。 話が前後してしまいますが、ブックのマクロの設計の全体は、以下のようになります。 × 1)VBAが自動でファイルを開ける * 不要(タスクが行います- 2)VBAが作動 +3)自動保存 (ThisWorkbook.Close True を使います。) 4)Applicaiton.Quit 私の考えでは、そのまま、ThisWorkbook.Close True で、[保存 ->終了]だと、その後の、Excel自体の終了マクロが実行しないようなのです。そこで、Ontime で、マクロの実行を残しておくわけです。たぶん、Application設定なのだから実行できるのだと思います。 ThisWorkbook モジュールの Private Sub Workbook_Open() '自動起動処理マクロの呼び出し 'ファイルを閉じる(20秒後ですが、マクロの処理時間を考慮して、ユーザー設定してください) Application.OnTime Now + TimeValue("00:00:20"), "mAutoClose" End Sub '標準モジュール Sub mAutoClose() Application.Quit End Sub 注意:場合によっては、Excelが開いてから安定するまでの時間を計って、マクロの実行の余裕をみたほうがよいかもしれません。ですから、その場合は、OnTime で、マクロの自動実行の有余時間をとります。そのまま、不安定なままで実行してしまうと、例えば、Webクエリなど、IE オブジェクトを必要とするような場合は、うまく実行しないことがあります。私のマクロなどでは、Excelの起動時直後に、他のオートメーション・オブジェクト(IEなど)を使用すると安定が悪く、エラー発生することがあるようです。 また、マクロは、十二分にエラー処理などを施されているのは言うまでもありません。 もし、自分がExcelの使用中に、Excelの特定のブックを開き動かすには、#2さんの方法がよいかもしれません。今回の私の設定ですと、今、使っているExcelも終わろうとしてしまいます。ただし、使用中のブックが保存していなければ、キャンセルをすれば、タスクに設定されたブックだけが閉じて、後は止まります。
お礼
ありがとうございます。 現在のところ、No2さんの方で色々試しております。 こちらのやり方も、勉強させてもらい、今後活用して いければと思います。 タスク機能について、とても勉強になりました。 誠にありがとうございます
- nicotinism
- ベストアンサー率70% (1019/1452)
まずは下記コードをそちらの環境に合わせて変更し 拡張子を VBS にしたファイルにして 保存しダブルクリックして実行してみてください。 set objXL = CreateObject("excel.application") objXL.Workbooks.Open("xlsファイルへのフルパス") objXL.Visible = true objXL.run "xls のモジュール名" うまく動いたら xlsを終了してください。 先ほどの VBSファイルをメモ帳で開いて objXL.Visible = true を objXL.Visible = False に変更します。 で上書き保存。 これで xlsファイルは開かれてモジュールが実行されても 見えなくなります。 毎日 突然 xlsファイルが現れるのは・・・と思いますのでお好みで。 ※現状だとxlsファイル(EXCEL)は見えては居ませんがずっと残り続けますので >と言うVBAになっております に Application.Quit ととでも付け加えて自動的に終了するようにして下さい。 (VBSファイルの方で終了処理を行う事も出来ますが、強制終了ですので VBAが実行中だったり何かのエラーで止まっていたりすると危険です なのでVBA(EXCEL)側で終了させた方が安全です) また実行結果をその都度 ログファイルに書き出すようにVBAに手を加えた方が なにかと宜しいかと思います。 ここまできたら スタートメニュー → アクセサリ → システムメニュー に タスクがありますので先ほどの VBSファイルを登録すれば 毎日自動的に実行されるようになります。 登録はウィザードにしたがって進めてゆけば分かるかと思います。 独り言 WorkBookのOpen時イベントに例のVBAが書かれているのなら VBS は要らないかな・・でもうっかり開いてVBAコードが走ってしまったら 問題になるかもしれない。
補足
ありがとうございます。全く理解できていませんんで、申し訳ないので 質問をさせてください。 VBSと言うものが全く理解できていないのですが、 コードはメモ帳に記述すればよいのでしょうか? 動作をさせるファイルはサーバー機にファイルがあるのですが、 そうすると、VBSコードはサーバー機に保存して、設定もサーバー機 にしないといけないと言う事ですか? VBSが理解できていないもので、、、 もしお手数でなければ、ご回答のほどお願いいたします。
- zap35
- ベストアンサー率44% (1383/3079)
OnTimeメソッドを使います Application.Ontime TimeValue("12:00:00") "Macro1" のように指定します。 また現在時刻から一定時間後に起動するなら Application.Ontime Now + TimeValue("06:00:00") "Macro1" になります 詳しくはOnTimeのヘルプをみるか、「エクセル VBA OnTime」でネット検索してみてください
補足
ご回答ありがとうございます。 根本的なことを説明していませんでした。 VBAのファイルは現在、人の手で 1)ファイルを開ける→2)VBAを動かす→3)自動保存してファイルを閉じる となっております。 これを所定の時刻が来たら 1)VBAが自動でファイルを開ける→2)VBAが作動→ 3)自動保存してファイルを閉じる と言う形にしたいのですが、、、 よくよく考えてみたら、VBAの記述されているファイルが開いていない のに、VBAを自動で動かすのって、無理ですよね? これを実現しようと思ったら、win上で動くものにしないと無理ですよね?
お礼
ご丁寧にお返事ありがとうございます。 URL等も教えていただき誠にありがとうございます。 これらを見て、自分の環境に適用していけるよう 頑張ってみます。 ありがとうございます。