準・究極の選択

エクセル2010でタイマーを作って作動させるとかならず応答なしになります。Sleepも使ったのですが応答なしになりました。そうなった理由をできれば教えてください。よろしくお願いします
マクロ
Sub macro()
Dim EndTime As Long
Dim PassTime As Long
EndTime = Timer + Range("c6").Value * 60 + Range("E6").Value
Do
PassTime = Timer
Range("c6").Value = (EndTime - PassTime) \ 60 '分
Range("e6").Value = (EndTime - PassTime) Mod 60 '秒
Loop Until EndTime - PassTime <= 0

Beep

MsgBox "時間だよ"

End Sub

A 回答 (2件)

xl2010で試しましたが、問題なく動きましたよ。


(但し、1分数十秒迄しか試しておりませんが)
DoEventsを入れないと、画面の更新がなされない事がありますが、
それを応答無しと勘違いされている事はありませんか?
これだけのためにPCを100%占有しても仕方が無いので、Sleepは入れた方が良いでしょう。

Sub macro()
Dim EndTime As Long
Dim PassTime As Long
EndTime = Timer + Range("c6").Value * 60 + Range("E6").Value
Do
PassTime = Timer
Range("c6").Value = (EndTime - PassTime) \ 60 '分
Range("e6").Value = (EndTime - PassTime) Mod 60 '秒
DoEvents: DoEvents: DoEvents
Loop Until EndTime - PassTime <= 0
Beep
MsgBox "時間だよ"
End Sub
    • good
    • 0
この回答へのお礼

上記のコードで試してみたらできました!ありがとうございます

お礼日時:2013/02/07 17:57

ブレイクしてる?


例えば、「Do」でブレイクするると、時空が歪んでしまって、「(EndTime - PassTime)」は最早マイナスの世界になっている、、、
が、永久ループにはならないのでは??
    • good
    • 0

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