Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3091 / 13646 ツリー ←次へ | 前へ→

【64361】DoEventsの使い方について教えてください hide 10/1/31(日) 15:23 質問[未読]
【64364】Re:DoEventsの使い方について教えてください Abyss 10/1/31(日) 16:28 発言[未読]
【64367】Re:DoEventsの使い方について教えてください hide 10/1/31(日) 17:08 お礼[未読]

【64361】DoEventsの使い方について教えてください
質問  hide  - 10/1/31(日) 15:23 -

引用なし
パスワード
   VBA初心者です。

Excel2007で下のプログラムを作ってみました。

このプログラムの動作中に任意のセルに書き込みを行うと
プログラムの途中でカウントが停止します。
セルへのダブルクリックでも同様の結果になります。
どうもDoEventsからプログラムに制御が戻ってこないようです。
プログラムには排他処理を入れていませんが、多重起動はして
いませんし、他のプログラムも存在しません。

カウントアップしながらキー入力できれば希望の動作となる
のですがDoEventsの使用方法を間違えているのでしょうか。
その場合どのような関数を使えば良いのか教えてください。

Option Explicit

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub test()

  Worksheets("Sheet1").Cells(1, 1).Value = 0
     
  While Worksheets("Sheet1").Cells(1, 1).Value < 60

      Worksheets("Sheet1").Cells(1, 1).Value = _
        Worksheets("Sheet1").Cells(1, 1).Value + 1
      
      DoEvents
      
      Sleep (100)

  Wend

End Sub

【64364】Re:DoEventsの使い方について教えてくだ...
発言  Abyss  - 10/1/31(日) 16:28 -

引用なし
パスワード
   こんにちは。

セルが編集状態に入るとセル操作VBAプロシージャの
進行はそこで一時停止します。仕様ですね。
代わりに、Statusbarなどに情報を表示するのは
如何ですか?あるいはUserformなどに。

VB6まではマルチスレッド仕様ではないので
バッググラウンドで監視するようなコードの
組み入れは不可能との認識です。考えられるのは
APIのSetTimer関数などでコールバックを
仕込むぐらいでしょうか。

【64367】Re:DoEventsの使い方について教えてくだ...
お礼  hide  - 10/1/31(日) 17:08 -

引用なし
パスワード
   Abyssさん

回答ありがとうございます。

実際に作りたいアプリケーションの要求から
StatusBarやUserFormでの実現は難しそうです。

仕様ということであれば別の手段を模索してみます。
まずはSetTimerから頑張ります。

本当にありがとうございました。

3091 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free