「一定の時間間隔で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も見ています
-
都道府県穴埋めゲーム
都道府県の名前を1人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルで定期的(30分おき)にマクロを実行させる方法は?
Excel(エクセル)
-
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
エクセル時間毎ごとにマクロを実行するやり方。
Excel(エクセル)
-
-
4
エクセルのマクロを一定時間ごとに実行
Excel(エクセル)
-
5
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
6
エクセルでVBAを使用して1分毎にファイルを保存するプログラムを書きた
Excel(エクセル)
-
7
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
8
VBA Ontime を一旦停止をさせるには
Excel(エクセル)
-
9
OnTime の中断方法について
Excel(エクセル)
-
10
1秒毎にセルの値を1ずつ増やしたいのですが
Excel(エクセル)
-
11
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
12
エクセルマクロ自動更新
Visual Basic(VBA)
-
13
Excelマクロにて、タイマーで自動更新は出来るのでしょうか?
Visual Basic(VBA)
-
14
エクセルで5分ごとにデータを蓄積、保存したいのですが…
Excel(エクセル)
-
15
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
エクセル、条件を満たしたら音を鳴らす方法教えて下さい
Excel(エクセル)
-
18
VBAのタイマー
Excel(エクセル)
-
19
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
20
EXCELVBAを使ってシートを一定時間ごとに連続で切り替えるマクロを
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SONYの音楽ソフト「x-アプリ」...
-
DMMで電子書籍を購入し、ファイ...
-
linux初心者です wineをつかっ...
-
windows10のごみ箱をrd /s /q C...
-
信頼済みサイト登録をbatファイ...
-
Macでシェルスクリプト実行時に...
-
「一定の時間間隔で5秒毎にMacr...
-
AccessのマクロでWordを最前面...
-
python IDLEで訂正、削除のやり...
-
貴方のモットーを教えて下さい...
-
HomePod mini で音声聴取し家族...
-
コマンドプロンプトについて
-
HP-UXで、ログイン時のログを採...
-
「ファイル名を指定して実行」...
-
CRONを隔週の日曜日に実行させたい
-
Cygwinについて
-
この場合どちらのクエリが実行...
-
Openイベントを開始させないで...
-
「もっと」と「さらに」は、ど...
-
エクセル時間毎ごとにマクロを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
貴方のモットーを教えて下さい...
-
SONYの音楽ソフト「x-アプリ」...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
LD_LIBRARY_PATHって?
-
python IDLEで訂正、削除のやり...
-
最初の一度しか実行されないロ...
-
エクセルからアクセスのプロシ...
-
コマンドプロンプト「システム...
-
Openイベントを開始させないで...
-
ROBOCOPY cmdで正常に処理され...
-
shutdownコマンド実行の残り時...
-
Mac de プログラム
-
バッチファイル内の各コマンド...
-
windows10のごみ箱をrd /s /q C...
-
CRONを隔週の日曜日に実行させたい
-
Macでlsした際の、ファイル名の...
-
taskkill をバッチ処理できない。
-
「一定の時間間隔で5秒毎にMacr...
-
windowsからtelnetでログインし...
おすすめ情報