• ベストアンサー

VBAでのタイマー使用例

お世話になります。 Office2003のエクセルVBAでの質問です。 シートにボタンがあり、ボタンをクリックしたらタイマーが動き出してセル内の数字のカウントアップが始まるってような事を行いたいと考えております。 ボタンを押したらタイマーが動きだし、そのタイマーイベントの中でセル内の数字をカウントアップすると考えたのですが、タイマーの使い方がわかりません。 タイマーを使った簡単なサンプルを教えていただけないでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか? Excel VBAの場合は、そういう機能に対するものは、おそらくはクラスとは言わないですが、厳密にはありませんね。 >これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。 それは出来ますが、ワークシートの作業に対して、完全にバックで動かし、影響をなくすのは難しいです。実際は、以下でいう、'指定時刻に実行するマクロ名' マクロの内容にも依存してきます。このマクロ側が、どういう性格なものか分からないと、ちょっと難しいですね。ここのカテゴリで一番良くある例としては、楽天のRSSがあります。 お礼側に出ていコードに手を加えてみました。 'おそらく、標準モジュールのほうがよいでしょう。 Private MacroStop As Boolean Sub 指定時刻にマクロを実行する() Dim myWait As Integer Dim 指定時刻 As Date   myWait = 5 '秒   指定時刻 = Now + TimeSerial(0, 0, myWait)   If MacroStop = False Then     Application.OnTime 指定時刻, "指定時刻にマクロを実行する"     Call 指定時刻に実行するマクロ名   Else     MacroStop = False     End   End If End Sub Sub 指定時刻に実行するマクロ名()   Cells(1, 1).Value = Cells(1, 1).Value + 1    End Sub Sub タイマー停止()    MacroStop = True End Sub

tree1975
質問者

お礼

有難うございました。非常に参考になりました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 私は、ずいぶん、そのコードは書いたけれど、かなり難問のひとつだと思います。理由は、メモリの占有率にあるのですね。タイマーイベントは、VB6 のもので、Excelにはありません。 ですから、Excelでは、どうしても、思ったものが作れないのです。ある方は、APIタイマーを使う人がいますが、責任が持てません。 まず、簡易型を紹介します。1秒ごとに数値が増えるようになっています。ただし、問題点はあります。 Private Sub CommandButton1_Click()  Dim Start As Date  Dim NT As Date  Dim OT As Date  Dim Cnt As Long   On Error GoTo EndLine   'Esc キーでマクロを抜ける   Application.EnableCancelKey = xlErrorHandler   Start = Time   Cnt = 1   Do    NT = Time    If NT > OT Then     Cells(1, 1).Value = Cnt     Cnt = Cnt + 1     OT = NT    End If   Loop While NT < Start + TimeValue("00:10:00") '10分まで EndLine: End Sub

tree1975
質問者

お礼

ご回答有難うございます。 VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか? それがあれば、スレッド内で時間を現在の時間を見ながら処理が行えるように思えるのですが。 下記はググッて見つけた指定時間にマクロ実行するサンプルコードです。 これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。 Sub 指定時刻にマクロを実行する() 指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1 待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2 Application.OnTime TimeValue(指定時刻), _ "指定時刻に実行するマクロ名", _ TimeValue(待ち時間) End Sub Sub 指定時刻に実行するマクロ名() ' 'ここへマクロを記入 End Sub

関連するQ&A