VBからIEを閉じる

解決


IZU  2005-08-05 01:41:18  No: 91273

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


ジョニオ  2005-08-05 02:04:24  No: 91274

コードは間違ってないと思います。
でも、オブジェクトの消滅と検索しかたの関係で、
検索と消滅を分けて行わないと上手く行かないと
思います。

'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


IZU  2005-08-05 09:38:50  No: 91275

ジョニオさん、ありがとうございます
ジョニオさんの教えてくださったのと同じような考えで
自分でも検証したことがあったのですが、そのときも今回も、
Set objIE(intIEcnt) = objWindow
のところでつまってしまいます

Set objIEに添字をつけてobjWindowを代入することは
できないように思い始めてきました

他の方の環境だと↑のようなやりかたでも動作しているのでしょうか?


ジョニオ  2005-08-05 18:51:47  No: 91276

配列は、
Public objIE(64) As Object  '検索IEオブジェクト
と宣言しているだけで、正常に動作しています。

>Set objIE(intIEcnt) = objWindow
>のところでつまってしまいます
つまるとは、どの様な現象になるのでしょうか?

>他の方の環境だと↑のようなやりかたでも動作しているのでしょうか?
私の環境は、XPで問題なく動作しておりますが、
IZUさんの環境は何なんでしょうか?


IZU  2005-08-06 09:50:08  No: 91277

ジョニオさん、何度もレスをいただいてありがとうございます

各オブジェクトの宣言をするところを
某サイトに記載されていたのをそのまま流用していたのですが
Public objIE(64) As Object  '検索IEオブジェクト
というところの宣言が間違っていたようです
自分が少し抜けてました・・

ジョニオさんの助言により問題は解決しました
本当にありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加