プロが教えるわが家の防犯対策術!

お世話になります。

Office2003のエクセルVBAでの質問です。
シートにボタンがあり、ボタンをクリックしたらタイマーが動き出してセル内の数字のカウントアップが始まるってような事を行いたいと考えております。

ボタンを押したらタイマーが動きだし、そのタイマーイベントの中でセル内の数字をカウントアップすると考えたのですが、タイマーの使い方がわかりません。

タイマーを使った簡単なサンプルを教えていただけないでしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/30 10:32

こんにちは。



私は、ずいぶん、そのコードは書いたけれど、かなり難問のひとつだと思います。理由は、メモリの占有率にあるのですね。タイマーイベントは、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
    • good
    • 0
この回答へのお礼

ご回答有難うございます。

VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか?

それがあれば、スレッド内で時間を現在の時間を見ながら処理が行えるように思えるのですが。

下記はググッて見つけた指定時間にマクロ実行するサンプルコードです。
これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。

Sub 指定時刻にマクロを実行する()
指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1
待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2
Application.OnTime TimeValue(指定時刻), _
"指定時刻に実行するマクロ名", _
TimeValue(待ち時間)
End Sub
Sub 指定時刻に実行するマクロ名()
' 'ここへマクロを記入
End Sub

お礼日時:2007/04/27 12:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!