- ベストアンサー
VBAでのタイマー使用例
お世話になります。 Office2003のエクセルVBAでの質問です。 シートにボタンがあり、ボタンをクリックしたらタイマーが動き出してセル内の数字のカウントアップが始まるってような事を行いたいと考えております。 ボタンを押したらタイマーが動きだし、そのタイマーイベントの中でセル内の数字をカウントアップすると考えたのですが、タイマーの使い方がわかりません。 タイマーを使った簡単なサンプルを教えていただけないでしょうか?
- みんなの回答 (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
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 私は、ずいぶん、そのコードは書いたけれど、かなり難問のひとつだと思います。理由は、メモリの占有率にあるのですね。タイマーイベントは、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
お礼
ご回答有難うございます。 VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか? それがあれば、スレッド内で時間を現在の時間を見ながら処理が行えるように思えるのですが。 下記はググッて見つけた指定時間にマクロ実行するサンプルコードです。 これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。 Sub 指定時刻にマクロを実行する() 指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1 待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2 Application.OnTime TimeValue(指定時刻), _ "指定時刻に実行するマクロ名", _ TimeValue(待ち時間) End Sub Sub 指定時刻に実行するマクロ名() ' 'ここへマクロを記入 End Sub
お礼
有難うございました。非常に参考になりました。