• ベストアンサー

ExcelVBAで、タイマー割り込みって使える?

エクセルのVBAでインターバルタイマーによる定期的なマクロの起動を考えていますが、エクセルにはそのようなコマンドが見当たりません。 ループ処理をしても実現は可能だと思いますが、CPUの独占状態となると思うのですが、Accessのタイマー割り込みみたいなのってエクセルでは実現できないのでしょうか?よろしくお願いいたします

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Sub 指定時刻にマクロを実行する() 指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1 待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2 Application.OnTime TimeValue(指定時刻), _ "指定時刻に実行するマクロ名", _ TimeValue(待ち時間) End Sub Sub 指定時刻に実行するマクロ名() ' 'ここへマクロを記入 End Sub '--------------------------------------------------------------- Sub 現在より一定時間後にマクロを実行する() 指定時刻 = Now + TimeValue("HH:MM:SS") '現在時刻より何分後 ※2 待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2 Application.OnTime TimeValue(指定時刻), _ "一定時間後に実行するマクロ名", _ TimeValue(待ち時間) End Sub Sub 一定時間後に実行するマクロ名() ' 'ここへマクロを記入 End Sub '--------------------------------------------------------------- Sub 実行中のマクロを指定時刻まで一時中断して再開する() 指定時刻 = Now + TimeValue("HH:MM:SS") '現在時刻より何分後 ※2 Application.Wait (指定時刻) 'マクロ実行を指定時刻まで中断する ' 'ここへ再開後に処理するマクロを記入 End Sub '=============================================================== '<コメント> '※1 HH:MM:SSには任意の時刻を記入する (例) 9時5分なら 09:05:00 '※2 HH:MM:SSには任意の時間を記入する (例) 3分後なら 00:03:00 http://www.happy500z.com/YNxv214.html#8-1

cbr4001964
質問者

補足

サンプルまで付けて頂き有難うございます。 質問なのですが、このサンプルだと、Excelが、CPUを独占しませんか?出来れば外部からの割り込みみたいなのが欲しいのですが?? ピントがずれていたら申し訳ありません。 宜しくお願い致します。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 質問なのですが、このサンプルだと、Excelが、CPUを独占しませんか? 最後の例の、Sub 実行中のマクロを指定時刻まで一時中断して再開する() は、実行すると、終了するまでは他の操作を受け付けなくなりますが、他のはそんなことないですよ。

関連するQ&A

  • エクセルVBAでタイマーコントロールは使えますか

    エクセルVBAでタイマーコントロールは使えますか。 エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。 無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、 一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間 連続で動作させることに不安を感じています。 この他に、VBのタイマーコントロールのような機能を持つオブジェクトや 便利機能等があったら教えていただけませんか。 (一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼 び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド 等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。 尚、私はWindowsMe+エクセル2000でVBAを作成しています。 実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい ます。

  • ユーザーフォームを起動しながらタイマーのマクロを動かしたい

    現在、ユーザーフォームで入力したデータを各セルに入れてくVBAを書いています。これ自体は問題ないのですが、同時にタイマーのマクロを起動させたいのですが書き方がさっぱりわかりません。 ネットで調べて、タイマーのマクロは書けました。 タイマーのマクロというのは、特定の時間になったらユーザーフォームで打ちこんだデータのブックを送付して特定の宛先にメールするというマクロです。 このタイマーのマクロ自体は普通に動くのですが、設定した時間にユーザーフォームが開かれてるとマクロが動いてくれません。 そしてユーザーフォームは常に開かれている状態なんです。 希望としてはユーザーフォームが開かれている(入力している)時でも、はじめにメッセージボックスなどで「今からメール送信します。しばらくお待ちください。」などとメッセージを出して現状まで入力済みのデータ(ブックを)メールを送信させることが出来るのが希望です。 タイマーのマクロはWorkbook_Openに 指定時刻 = TimeValue("07:30:00") 待ち時間 = TimeValue("00:01:00") Application.OnTime TimeValue(指定時刻), "SendMail", TimeValue(待ち時間)   Call 次のメール送信 みたいな感じで書いてます。 ユーザーフォームが開いている状態でタイマーのマクロ(他のマクロ)を動かすのって無理なんですか? ちなみに、不定期なタイマーの方法がわからなかったので、それもわかれば教えていただけませんか。 一定時間感覚のタイマーはあったのですが、不定期なタイマーのマクロが調べても見つからず… タイマーのマクロを何個も書いてなんとか、一つのタイマー処理が終わったら次のタイマーマクロを呼び出すって方法を取りました。 もし、もっと簡単な書き方などあったらアドバイスお願いします。

  • ループマクロ起動時に他のエクセルファイルが起動できない

    VBAでメインループをずっとループさせ、 データが送られてきたらそれを受け取り処理をするマクロを作っています。 Do DoEvents Sleep 1 データが送られてきていれば処理 Loop という風にしているのですが、このマクロを起動中だと他のエクセルファイルが開けないのです。 他のファイルをダブルクリックしても、起動中のこのマクロのエクセルが前面にくるだけです。 なにか特別な処理をループ中にいれなければならないのでしょうか?

  • Accessモジュールのインターバル起動

    Accessのモジュールを定期的(たとえば10毎、1時間毎)に起動させることってできますか?その実効をバックグランドで行いたいので、通常と同じようにワードやエクセル、インターネットエクスプローラなどを動かしたいのですが。ループをかけて、DoEventsで、制御をオペレーティング システムに渡す方法だとプロセスのCPU独占比率が多いような気がするのですが?教えて頂けませんか?

  • Excel-VBAでタイマー処理

    お世話になります。 Excel-VBAでユーザフォームを操作したいのですが、VBの場合ツールボックスにタイマーコントロールがありますが、Excel-VBAの場合ツールボックスにタイマーコントロールがありません。 タイマー処理はどうしたら良いのでしょうか?

  • ExcelVBA UserFormに沢山のボタンを貼り付けたい

    Excel2003のVBAを使っています。 コマンドボタンが沢山付いたユーザーフォームを起動したいのですが、 フォームに貼り付けるコマンドボタンの個数は、マクロを実行した時に決めたいです。 (例えば任意のセルの値を読み込むなどして) 要するにコードの中で、コマンドボタンの生成をしたいのですが、 可能でしょうか。 VBでプログラム組んでる知人に聞いたところ、「コントロール配列」なるものを利用すれば可能だそうですけど、 VBAにはそれが無いと聞きました。

  • VBA 再実行

    エクセルVBAでループによる以下のような定期実行を行っています。 >1時間に一度株価のデータを取りに行きます。 >データ取得後、他のPCに(VBAでソフトを起動させて)アップロードします。 *このアップロードの時に、ソフトが別の処理をしていると起動しません。 VBAで起動はさせるものの、ソフトが実行しないという状態になります。 そこで、一度行った処理を時間をおいて再度実行させたいのです。 できれば、30秒後と1分後に2回再実行するというようにしたいと思っています。 どなたか、お力添え頂けませんか

  • Access2000のVBAでエクセルマクロ実行

    お世話になります。 Access2000のVBAでエクセルのマクロとアクセルのマクロを 交互に実行したいと思っております。 (1)エクセルのマクロ1を実行 (2)アクセスのマクロAを実行 (3)エクセルのマクロ2を実行 と交互に実行したいのです。 下記のサイトなどを参考に試みたのですが、 http://www.nurs.or.jp/~ppoy/access/access/acX005.html (1)を実行している途中に (2)が進んでしまいます。 どのようにすれば、(1)が終わってから(2)と、前の処理が 終わってから次の処理に進むことが出来るのでしょうか? Access2000のVBAから指示をかけたいので、 Access2000のVBAのコードで教えて頂ければと 思います。

  • Q>ExcelVBAで特定のサブルーチンを無効にするには?

    Excel2000であるシートに Worksheet_Change のサブルーチン(A)を入れて更新されると起動するようにしています。(A)は特定の列(B)にデータが入ったときに行なう処理を記載しています。 この状態でそのシートの列(C)のセルを順番に更新するようなマクロ(D)を作ったのですが、1つのセルの更新ごとに(A)が起動してしまうので処理が遅くなってしまいます。 1.(D)の処理中は(A)を起動させたくないので、(D)の初めに(A)を無効にする処理を入れたいのですが、そんなコマンドはあるのでしょうか? 2.または、(A)の処理を Worksheet_Changeで実現するのではなく、特定の列(B)のセルが更新されたときのみに行なうようにする方法はないでしょうか? ご存知の方がいましたら、よろしくお願いします。m(_ _)m

  • WSHスクリプトから動かしたEXCEL・VBAマクロでWSHスクリプトを停止する方法

    WSHスクリプトからEXCELファイルのVBAマクロを呼び出し実行させます。 このマクロ内ではif関数で設定している条件の真偽を判定しています。偽の場合、マクロは終了しEXCELファイルは一旦閉じられます。そして一定時間がたったら、WSHスクリプトのループ処理で再び同じマクロが開かれif関数で条件判定を行います。 もし、真の場合、マクロの設定処理の実行・終了とともにWSHのループ処理も終了させたいのですが、VBAマクロからそのマクロを実行させているWSHスクリプトを停止させることは可能でしょうか。

専門家に質問してみよう