EXCEL2003にて、開発しています。
下記のようにシェルオブジェクトを作成して、
画面数文ループして、IEオブジェクトを検索していますが、
タスクバー上には存在しているが、下記のループでは、
検出できないPCがあるのですが、考えられるケースは
どのようなものがあるでしょうか?
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
'シェルのオブジェクトを作成する
Set objShell = CreateObject("Shell.Application")
'現在起動中のオブジェクト分繰り返す
For Each objWindow In objShell.Windows
Do While objWindow.Busy = True
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
'TypeNameでオブジェクト変数のタイプを表示する
If TypeName(objWindow.document) = "HTMLDocument" Then
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
>If TypeName(objWindow.document) = "HTMLDocument" Then
ここで検出しているなら、これを満たしていない・・・と考える
のが普通かと思います。
まずは、検出できないPCでTypeName(objWindow.document)を調査するところ
から始めてみてはいかがでしょうか。(テキストに出力する等)
#回答でなくてすみません。
返信、ありがとうございます。
上記の件は、既に調査をしており、
エクスプローラが2つ、IEが2つの状態では、
IShellFolderViewDual2 が2回呼ばれます。
IEが、どうも、検出できていないようです。
また、発生している環境は、
WindowsXP SP1 +.NET Framewore V.1.1
です。同じ環境の別PCでは検出できているようです。
コードから言うと、.Busyが解けないってことじゃないの?
編集 削除デバッグした内容は、
If TypeName(objWindow.document) = "HTMLDocument" Then
で、TypeName(objWindow.document)が、IShellFolderViewDual2 のため、
falseになると言うことです。
正常なパターンは、エクスプローラが2つ、IEが2つの場合は、
・IShellFolderViewDual2 → 多分、エクスプローラ
・IShellFolderViewDual2 → 多分、エクスプローラ
・HTMLDocument → 多分、IE
・HTMLDocument → 多分、IE
となります。
なら、2+2=4ですべて検出されているんでしょ?
編集 削除いえいえ、以下のようになります。
(1)正常なパターン エクスプローラが2つ、IEが2つの場合
・IShellFolderViewDual2 → 多分、エクスプローラ
・IShellFolderViewDual2 → 多分、エクスプローラ
・HTMLDocument → 多分、IE
・HTMLDocument → 多分、IE
(2)今回のパターン エクスプローラが2つ、IEが2つの場合
・IShellFolderViewDual2 → 多分、エクスプローラ
・IShellFolderViewDual2 → 多分、エクスプローラ
のみ
以下のVer.Upで解消されました。
(発生環境)WindowsXP SP1 +.NET Framewore V.1.1
(解消環境)WindowsXP SP2