• 締切済み

エラー Loop

時計カウントのプログラムを以下のようにつくったのですが、 Sub/ユーザーフォームの実行をクリックしたら、セルに時刻 が表示されうごいたものの、中断やリセットをクリックしても 停止せず、マウス操作が無効になりました。参考本でみつけた Ctrl+Pauseで、コードの実行が中断できました。デバッグを クリックしたら、 Loop の部分が黄色くなりました。 Sub 時計() Do Until Time = "17:00:00" Cells(1,1).Value = Time Application.Wait Now + TimeValue("00:00:01") Loop End Sub 不具合を解決したいのですが、どなたか どうぞ 教えてくださいませんでしょうか。おねがいします。

みんなの回答

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.3

繰り返しタイマーにWaitを使うのは感心しません。 なぜかというとほとんどの間、処理が停止しているからです。 PCはその間VBAプログラムを実行してくれません。 Application.Ontimeでしたら指定した時刻に任意の処理を 実行させることが可能です。  とりあえずこれで実行できますので Application.Ontimeに取り組む前に時刻について少し 理解を深めてみてください。  また、APIのsettimerを使うなどの方法もあります。 Sub 時計() Cells(1, 1).Value = Time + TimeValue("00:00:05") MsgBox Cells(1, 1).Value Do Until Time >= Cells(1, 1).Value DoEvents Application.Wait Now + TimeValue("00:00:01") Loop End Sub

hi1a
質問者

お礼

DreamyCatさん、ご回答ありがとうございます。 OnTimeをもちいたプログラムをつくっていました。 Sub 時計() Do Until Time = "17:00:00" Application.OnTime EarliestTime:=Now + TimeValue("00:00:01") _ , Rrocedure:="OnTimeInput" DoEvents Loop End Sub Sub OnTimeInput() Cells(1,1).Value = Time End Sub どうもありがとうございました。

  • j-kachimi
  • ベストアンサー率35% (48/136)
回答No.2

タイマーイベントの使い方 1.ツールボックスからタイマーを貼り付ける(時計のアイコン) 2.上記のプロパティーの  enabel = ture intaval = 500 3.そのタイマーをダブルクリックすると、指定した時間に発生するイベントの処理ルーチンが作成される。 4.その処理ルーチンに   Cells(1,1).Value = Time などをいれる。  17:00:00を超えたら処理をやめたいなら   if Time >= "17:00:00" then timer1.enable = False  end if 5.実行中はコントロールにフォーカスを移しておく  例えば command1 setfocus こんなところです。 スペールや文法はうる覚えなので間違っているかもしれません。 VBの勉強がんばってくださいね。 「VB中学校」や「VB花ちゃん」など役に立ちますよ。

  • j-kachimi
  • ベストアンサー率35% (48/136)
回答No.1

コンピュータの割り込み処理は一般にi/o待ちにならないと発生しません。またI/o待ちが早すぎると割り込みを処理できません。 このプログラムだと恐らくCPUは全てこのループで使われてしまいます。 とりあえずループ内に DOEVENT を入れてみてください。 また、こういったプログラムを作るときは、タイマーイベントを使い例えば500msに一回セルを書き換えるようにするといいかと思います。

hi1a
質問者

お礼

J-kachimiさん 回答ありがとうございます。DoEventsを 挿入したら、他の操作も割り込み処理できることが確認できました。 ただ タイマーイベントはどのように使うのか。1秒間のうち、 500msだけ Do Loop 処理に当てられることができるのでしょうか。 それには どのように 挿入すればいいのでしょうか。初心者で すみませんが できればおしえていただけないでしょうか。

関連するQ&A

専門家に質問してみよう