- ベストアンサー
VBAで指定時刻まで一時停止するコード
- VBA初心者のため、VBAで指定時刻まで一時停止するコードがうまく動作しません。当日の午前9時から実行し、午後6時まで一時停止したいですが、すぐに午後6時以降のコードが実行されてしまいます。どのようなコードを記述すれば良いでしょうか?教えてください。
- VBA初心者のため、VBAで指定時刻まで一時停止するコードがうまく動作しません。午前9時から実行し、午後6時まで一時停止したいですが、すぐに午後6時以降のコードが実行されてしまいます。解決策を教えてください。
- VBA初心者のため、VBAで指定時刻まで一時停止するコードがうまく動作しません。午前9時から実行し、午後6時まで一時停止したいですが、すぐに午後6時以降のコードが実行されてしまいます。どうすれば良いでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Sub testz() Dim PauseTime As Date PauseTime = Now() + TimeValue("0:2:0") Do DoEvents 'If Now() > PauseTime Then Exit Do Loop While Now() < PauseTime MsgBox "AAA" End Sub とすれば期待の動きになるものと思いますが、 長時間待つ間に、 他のマクロブックを開く、他のマクロを実行する といったことが行われると 課題マクロが停止してしまうんじゃないかと思います。 (未検証です。) 私だったら、 9時に行うマクロと18時に行うマクロを マクロブック単位で分け タスクスケジューラーを使います。 9時に行うマクロが正しく動作したかどうかを 18時に行うマクロでチェックしたいということであれば 例えば、 9時に行うマクロが正しく終了するときにダミーファイルを書き出し 18時に行うマクロがこのダミーファイルの有無をチェックする といった仕組みを組み込んではいかがでしょうか。
その他の回答 (4)
- m-take0220
- ベストアンサー率60% (477/782)
> Loop While Now() < Finish 今のコードでは、この部分が実行されるときにはFinishに値が入っていません。 なので、すぐにループを抜けてしまうのでしょう。
お礼
そういうことなんですね。まだまだ勉強中の身ですが、精進していきたいと思います。 ご回答ありがとうございました!
- kkkkkm
- ベストアンサー率66% (1719/2589)
> Ontimeですと、Excelが固まってしまって(午後6時まで動作を中断し続けるので)、他の業務でExcelが使えません。 そうですか、なにかとバッティングするんでしょうか。単純なコードで試してみましたがtを実行したあと普通に使えて再度tが実行されました。 Sub t() Dim i As Long MsgBox "DDD" For i = 1 To 10 Cells(i, "A").Value = i Next Application.OnTime TimeValue("19:30:00"), "t" End Sub
お礼
そうですか。。 こちらでは何か別の要因があるのかもしれません。調べてみます。ご回答ありがとうございました!
- kkkkkm
- ベストアンサー率66% (1719/2589)
OnTimeメソッドでどうでしょう https://excel-ubara.com/excelvba1/EXCELVBA420.html
補足
Ontimeですと、Excelが固まってしまって(午後6時まで動作を中断し続けるので)、他の業務でExcelが使えません。 使用はしましたが、上記のような都合でDoWhile構文にした次第です。
- hahaha8635
- ベストアンサー率22% (800/3610)
タイマー割込み https://excel-ubara.com/excelvba4/EXCEL299.html 二重起動防止とか割り込み禁止とか やらないといけないから APIの知識は必須だと思う
お礼
ありがとうございます。参考にします。
お礼
ご回答いただいたコードで実行してみましたが、他のExcelブックが開けない状態です。タイムスケジューラーを使う方法でやることにします。 ご回答ありがとうございました!