Excel VBA質問箱 IV

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

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


34904 / 76738 ←次へ | 前へ→

【47037】Re:DoEventsとは
発言  Kein  - 07/2/26(月) 15:55 -

引用なし
パスワード
   Windowsは「見た目では何もソフトを起動していない」状態であっても
常に何らかの処理をし続けているらしいです。それは以下のようなマクロ
によって、実行中のウィンドウタイトルを列挙してみれば分かります。

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _
lPalam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Sub RefreshWinList()
  Dim dumb As Boolean
  
  dumb = EnumWindows(AddressOf EnumWinProc, 0&)
End Sub

Function EnumWinProc(ByVal hWndX As Long, _
lParam As Long) As Boolean
  Dim Name As String
  Dim Leng As Long, Ret As Long

  Name = String(250, Chr(0))
  Leng = Len(Name)
  Ret = GetWindowText(hWndX, Name, Leng)
  Debug.Print Name
  EnumWinProc = True
End Function

で、そこへ何かのソフト(マクロを実行する前提だから、常識的にExcelは入る)
を立ち上げて処理を始めると、Windowsはそれに対して重点的にメモリーや
CPUの働きを割り当てるようにします。これはOSに限ったことではないのですが、
「同時に複数の処理を進める」ということが出来ないため、必要な処理を並べて
はいるが、ユーザーの求めに応じて(というか推測して?)自動的に優先順位を決め、
その順位の高いものにはより長い時間をシェアする、というような仕組みに
なっているらしいのです。となるとExcelのマクロを実行中は、必然的にExcel
の処理が多くなるため、Windows自身が出すメッセージの処理が後回しにされて
しまいます。例えばIEを立ち上げても、そのイベントを知らせるメッセージなどは
滞ることになるわけです。そこでIEが現在どのような処理をしているか ? という
ことを逐次Windowsに問い合わせるため

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate url
Do While ie.Busy
  DoEvents
Loop
Do While ie.ReadyState <> 4
  DoEvents
Loop

などとして、ある条件を満たすまでループするようにします。
>分かりやすい具体例
とのことですが、上のコードは掲示板でも良く見かけると思います。

1 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 発言

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