Command1で複数のIEを開き、Command2ですべてのIEを閉じたいと思います
下記のソースだと、IEが3つまでなら正常に動くのですが、
IEが4つ以上になると、開いたIEの一部しか閉じなくなってしまいます
j = objShell.Windows.Count
で、オブジェクトの数が正しいことは確認できるのですが
For Each objWindow In objShell.Windows
で、IEの数の分だけループしないようです
ソースにおかしなところがあるようでしたらご指摘願えませんでしょうか
よろしくお願いします
Private Sub Command1_Click()
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "http://madia.world.coocan.jp/"
End Sub
Private Sub Command2_Click()
Dim objShell As Object
Dim objWindow As Object
Dim objIE As Object
Dim j As Integer
Set objShell = CreateObject("Shell.Application")
j = objShell.Windows.Count
Debug.Print j
For Each objWindow In objShell.Windows
If TypeName(objWindow.document) = "HTMLDocument" Then
Set objIE = objWindow
objIE.Quit
End If
Next
Set objShell = Nothing
End Sub
コードは間違ってないと思います。
でも、オブジェクトの消滅と検索しかたの関係で、
検索と消滅を分けて行わないと上手く行かないと
思います。
'IE検索
'シェルのオブジェクトを作成する
Set objShell = CreateObject("Shell.Application")
'IEウィンドウ数初期化
intIEcnt = 0
'ウインドウの数だけまわす
For Each objWindow In objShell.windows
'MsgBox TypeName(objShell.windows)
'Debug.Print "タイプは:" & TypeName(objWindow.document)
'HTMLDocumentだったら
If TypeName(objWindow.document) = "HTMLDocument" Then
'オブジェクトを代入する
Set objIE(intIEcnt) = objWindow
intIEcnt = intIEcnt + 1
End If
Next
Set objShell = Nothing
'IE終了
'発見したウインドウの数だけまわす
For i = 0 To (intIEcnt - 1)
objIE(i).Quit '.quitメソッド
Next i
ジョニオさん、ありがとうございます
ジョニオさんの教えてくださったのと同じような考えで
自分でも検証したことがあったのですが、そのときも今回も、
Set objIE(intIEcnt) = objWindow
のところでつまってしまいます
Set objIEに添字をつけてobjWindowを代入することは
できないように思い始めてきました
他の方の環境だと↑のようなやりかたでも動作しているのでしょうか?
配列は、
Public objIE(64) As Object '検索IEオブジェクト
と宣言しているだけで、正常に動作しています。
>Set objIE(intIEcnt) = objWindow
>のところでつまってしまいます
つまるとは、どの様な現象になるのでしょうか?
>他の方の環境だと↑のようなやりかたでも動作しているのでしょうか?
私の環境は、XPで問題なく動作しておりますが、
IZUさんの環境は何なんでしょうか?
ジョニオさん、何度もレスをいただいてありがとうございます
各オブジェクトの宣言をするところを
某サイトに記載されていたのをそのまま流用していたのですが
Public objIE(64) As Object '検索IEオブジェクト
というところの宣言が間違っていたようです
自分が少し抜けてました・・
ジョニオさんの助言により問題は解決しました
本当にありがとうございました
ツイート | ![]() |