
「一定の時間間隔で5秒毎にMacro1を実行する」
一応startマクロ、stopマクロは作成してみたのですが、
下記stopコマンド実行しても止まらなかったような気がします。
ここから改変するとしたらどうですか?
Public timestop As Boolean
Sub test()
Dim tt As Double
Dim wt As Double
tt = Now + TimeValue("00:00:05") '5秒後
wt = TimeValue("00:00:02") 'インターバル2秒
Application.OnTime tt, "Macro1", wt
If (timestop = False) Then
Time = Timer
Application.OnTime earliesttime:=(Now + TimeValue("00:00:01")), procedure:="test"
End If
End Sub
----------------------------------------
ここからstart,stopマクロ
Sub t_start()
timestop = False
Call test
End Sub
Sub t_stop()
timestop = True
End Sub
No.1ベストアンサー
- 回答日時:
OnTimeを解除するときは、設定した時と同時刻を指定して解除を実行しなければなりませんので、前に設定した時刻を記憶させておかねばなりません。
Dim tt As Double
Sub test()
Dim wt As Double
tt = Now + TimeValue("00:00:05") '5秒後
wt = TimeValue("00:00:02") 'インターバル2秒
Application.OnTime tt, "Macro1", wt
End Sub
Sub macro1()
MsgBox ""
Call test
End Sub
'----------------------------------------
'ここからstart , stopマクロ
Sub t_start()
Call test
End Sub
Sub t_stop()
Application.OnTime earliesttime:=tt, procedure:="Macro1", Schedule:=False
End Sub
No.3
- 回答日時:
#2、cjです、忘れものがあったので自己レス、です。
If flgEsc Then ' タイマーを止めるフラグが立っていたら、↓止める。
の次の行から
If dtNext = 0 Then
flgEsc = False
Exit Sub
End If
の4行が必要でした。
これは、タイマー非実行時に、タイマーをストップさせようとした場合には何もしない、
という意味で、#2、の記述のままではエラーになってしまいます。
因みに、
Application.OnTime EarliestTime:=dtNext, Procedure:="TimerProc", Schedule:=False
の一行を、
On Error Resume Next
Application.OnTime EarliestTime:=dtNext, Procedure:="TimerProc", Schedule:=False
On Error GoTo 0
のようにしても、同じ様にタイマー非実行時にタイマーをストップさせようとした場合のエラー
を回避することは、可能です。
どちらかひとつ、追加、修正をお願いします。
失礼しました。
No.2
- 回答日時:
こんにちは。
Double 型ではなくて、Date 型です(Double 型とDate 型では同値にならない場合があります)。
常に次回実行時刻(の値を)を確保しておいて、
今回実行時刻(の値)の5秒後にスケジュールを追加するようにしないと、
「5秒間隔」とは違ってしまうことがあります。
もしも「実行したタイミングの5秒後」という意味でしたら、少し修正が必要です。
stopの命令があれば、次回実行時刻を(キャンセルし)待たずに
タイマーを即、終了します。
startのタイミングではMacro1を実行せずに、
startのタイミングの5秒後からMacro1を実行するように書いていますが、
初回も実行したいなら、1行(Macro1と)追記してください。
' ' 〓〓〓〓〓シートモジュール〓〓〓〓〓
'Option Explicit
' ' =====================
Private Sub CommandButton1_Click() ' 例えば仮に、startボタン(Sub t_start()の代り)
TimerProc True
End Sub
' ' ーーーーーーーーーーーーーーーー
Private Sub CommandButton2_Click() ' 例えば仮に、stopボタン(Sub t_stop()の代り)
flgEsc = True ' タイマーを止めるフラグ(パブリック)を立てる
TimerProc
End Sub
' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
' ' 〓〓〓〓〓標準モジュール〓〓〓〓〓
' ' ===モジュール上部の宣言セクション===
'Option Explicit
Public flgEsc As Boolean ' タイマーを止めるフラグ(パブリック)
Private dtNext As Date ' 次回実行時刻(プライベート)
' ' =====================
Sub TimerProc(Optional ByVal flg1st As Boolean) ' (Sub test()の代り)
Dim dtLatest As Date
If flgEsc Then ' タイマーを止めるフラグが立っていたら、↓止める。
' ' 次回のスケジュールを解除
Application.OnTime EarliestTime:=dtNext, Procedure:="TimerProc", Schedule:=False
dtNext = Empty ' 初期値に戻す
flgEsc = False ' 初期値に戻す
Else ' タイマーを↓継続。Macro1を実行後、次のスケジュールを設定。
If flg1st Then
' ' 初回実行時刻(今から5秒後)を確定する。
dtNext = DateAdd("s", 5, Now())
Else
' ' 実行プロシージャをコール
Macro1
' ' 次回実行時刻(今回の実行時刻から5秒後)を確定する。
dtNext = DateAdd("s", 5, dtNext)
End If
' ' 次回実行時刻に他の処理が優先的に実行されていたら、いつまで待つかを決める。
' ' 次回実行時刻の2秒後(今回の実行時刻から7秒後)
dtLatest = DateAdd("s", 2, dtNext)
' ' 次回のスケジュールを登録
Application.OnTime EarliestTime:=dtNext, Procedure:="TimerProc", LatestTime:=dtLatest
End If
End Sub
' ' ーーーーーーーーーーーーーーーー
Sub Macro1() ' 実行プロシージャ
Cells(1) = Cells(1) + 1 ' ← 例えば仮に、便宜的な仮の処理
End Sub
' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
エクセルで定期的(30分おき)にマクロを実行させる方法は?
Excel(エクセル)
-
-
4
エクセルのマクロを一定時間ごとに実行
Excel(エクセル)
-
5
時間のマクロで最初はその時間、2回目以降は15分ごとに自動で実行させたい。
Excel(エクセル)
-
6
OnTime の中断方法について
Excel(エクセル)
-
7
タイマーマクロの二重起動防止をしたい
Visual Basic(VBA)
-
8
エクセル時間毎ごとにマクロを実行するやり方。
Excel(エクセル)
-
9
VBA Ontime を一旦停止をさせるには
Excel(エクセル)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
Excel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい
Excel(エクセル)
-
12
OnTimeを使ったのですが「エラー」になってしまいます
Visual Basic(VBA)
-
13
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
14
エクセル マクロ 一定時間おきにセルをクリック
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
エクセルの表にヘンな枠が・・・
-
Linux のシェルスクリプトの強...
-
バッチファイル内の各コマンド...
-
Openイベントを開始させないで...
-
不必要なサービス?svchost.exe
-
PowerShellのスクリプト実行に...
-
logrotateの実行ユーザ
-
最初の一度しか実行されないロ...
-
shutdownコマンド実行の残り時...
-
WindowsScript で実行し終了を...
-
エクセルからアクセスのプロシ...
-
コントロールパネル
-
ROBOCOPY cmdで正常に処理され...
-
シャットダウンバッチがうまく...
-
teratermマクロ でSQL?
-
linuxサーバーのキャッシュをク...
-
マイドキュメントのファイル一...
-
Windows VistaやWindows7にて、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
pingは正常なのにtracerouteで...
-
エクセルの表にヘンな枠が・・・
-
Linux のシェルスクリプトの強...
-
PowerShellのスクリプト実行に...
-
最初の一度しか実行されないロ...
-
sudoで実行したコマンドの実行...
-
大手町駅。それはホームから非...
-
SPI非言語の問題 解説お願いします
-
windows10のごみ箱をrd /s /q C...
-
バッチファイル内の各コマンド...
-
Openイベントを開始させないで...
-
シャットダウンバッチがうまく...
-
サーバでログオフするとアプリ...
-
エクセルからアクセスのプロシ...
-
taskkill をバッチ処理できない。
-
emacsでCtrl+zを押してサスペン...
-
shutdownコマンド実行の残り時...
-
python IDLEで訂正、削除のやり...
-
ACCESSレポートをPDFに出力したい
おすすめ情報