Excel VBA質問箱 IV

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

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


34909 / 76738 ←次へ | 前へ→

【47032】Re:DoEventsとは
発言  ichinose  - 07/2/26(月) 7:56 -

引用なし
パスワード
   おはようございます。

MS社のHelpは私もわかりづらい記述だと思っています。
(というより、ソフトウェアのマニュアルって全体的にわかりづらいよね)
特に勉強をやりはじめだと殊にそう感じると思います。

よって、自分が記述する時は「もっとわかりやすく記述しよう」
という気になりますよね!!

DoEvents 制御をWindowsに戻すフロー制御関数とあります。

Windowsに制御を戻した事による結果は、その時の処理によってケースバイケースです。

例1

新規ブックの標準モジュールに

Sub test1()
  Cells.Clear
  Range("A1").Select
  SendKeys "aaa" & Chr(13)
  Range("A2").Value = Range("A1").Value
End Sub

'上記のコードセルA1を選択してSendkeysステートメントで文字を送っています。
'その後A1の内容をA2に移行する、よってセルA2にも「aaa」と表示される
'ことを想定していますが、A2は空白のままですよね?

Sub test2()
  Cells.Clear
  Range("A1").Select
  SendKeys "aaa" & Chr(13)
  DoEvents
  Range("A2").Value = Range("A1").Value
End Sub

'上記のようにDoeventsを入れると想定どおり、セルA2にも「aaa」と表示される
’Sendkeysは、Windowsに制御は移らないと実行されません。つまり、test1では、
'test1の実行が終了後にSendkeysが実行されます。
'test2では、Doeventsを入れることで制御フローを変更しています。


例2 極簡単なストップウォッチを作ります

新規ブックのSheet1に「コントロールツールボックス」のコマンドボタンを
二つ配置してください(セルA1にボタンを重ねないこと)

Commandbutton1  --- セルA1に時刻を表示し続ける

Commandbutton2  --- 時刻を表示を中止する
 

Sheet1のモジュールに
'==========================================================
Option Explicit
'=================================================================
Private stop_ev As Boolean
Private Sub CommandButton1_Click()
  stop_ev = False
  Range("a1").NumberFormatLocal = "hh:mm:ss.00"
  Do Until stop_ev = True
    Range("a1").Value = [Now()]
    DoEvents
    Loop
End Sub
'==================================================================
Private Sub CommandButton2_Click()
  stop_ev = True
End Sub


上記のCommandButton1_Clickでループ中にDoeventsがあることで
時刻が表示中でもCommandbutton2をクリック可能になっています。
Doeventsを抜いて、動作の違いを確認してください。

2 hits

【47031】DoEventsとは 烏鷺 07/2/26(月) 3:09 お礼
【47032】Re:DoEventsとは ichinose 07/2/26(月) 7:56 発言
【47042】Re:DoEventsとは 烏鷺 07/2/26(月) 18:24 お礼
【47033】Re:DoEventsとは neptune 07/2/26(月) 9:19 発言
【47034】Re:DoEventsとは りん 07/2/26(月) 9:35 発言
【47035】Re:DoEventsとは neptune 07/2/26(月) 12:13 発言
【47043】Re:DoEventsとは 烏鷺 07/2/26(月) 18:38 お礼
【47037】Re:DoEventsとは Kein 07/2/26(月) 15:55 発言

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