「一定の時間間隔で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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルで定期的(30分おき)にマクロを実行させる方法は?
Excel(エクセル)
-
エクセルのマクロを一定時間ごとに実行
Excel(エクセル)
-
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
-
4
エクセル時間毎ごとにマクロを実行するやり方。
Excel(エクセル)
-
5
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
6
エクセルでVBAを使用して1分毎にファイルを保存するプログラムを書きた
Excel(エクセル)
-
7
エクセルマクロ自動更新
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
VBA Ontime を一旦停止をさせるには
Excel(エクセル)
-
10
OnTime の中断方法について
Excel(エクセル)
-
11
vba セルに入力した時間をマクロで受け取るには?
Excel(エクセル)
-
12
1秒毎にセルの値を1ずつ増やしたいのですが
Excel(エクセル)
-
13
Excel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい
Excel(エクセル)
-
14
エクセル、条件を満たしたら音を鳴らす方法教えて下さい
Excel(エクセル)
-
15
OnTimeを使ったのですが「エラー」になってしまいます
Visual Basic(VBA)
-
16
VBA=一定時間エクセルの入力操作がない場合、自動的にそのブックを閉じたい
Windows Vista・XP
-
17
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
18
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
19
OnTime を使って、分間隔で実行したいのですが
Visual Basic(VBA)
-
20
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
コマンドプロンプト Windows
-
LD_LIBRARY_PATHって?
-
IF文でコンピュータ名による条...
-
vbsが実行できません。 OSは、c...
-
SPI非言語の問題 解説お願いします
-
pingは正常なのにtracerouteで...
-
linux でバッチファイを作成し...
-
Openイベントを開始させないで...
-
linuxサーバーのキャッシュをク...
-
Lubuntuの.shについて実行ファ...
-
shutdownコマンド実行の残り時...
-
死にたいと考えてしまうことっ...
-
デフラグの目安
-
バッチファイル内の各コマンド...
-
DVD の中身を開けません
-
複数のバッチを同時並行で起動...
-
CRONTAB設定で2日間隔記述方法...
-
taskkill をバッチ処理できない。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
ファイルサイズが小さくなりま...
-
windows10のごみ箱をrd /s /q C...
-
LD_LIBRARY_PATHって?
-
バッチファイル内の各コマンド...
-
linuxサーバーのキャッシュをク...
-
最初の一度しか実行されないロ...
-
Linux のシェルスクリプトの強...
-
エクセルからアクセスのプロシ...
-
python IDLEで訂正、削除のやり...
-
SPI非言語の問題 解説お願いします
-
shutdownコマンド実行の残り時...
-
ROBOCOPY cmdで正常に処理され...
-
taskkill をバッチ処理できない。
-
Openイベントを開始させないで...
-
ACCESSレポートをPDFに出力したい
-
sudoで実行したコマンドの実行...
-
信頼済みサイト登録をbatファイ...
おすすめ情報