VBA開発

VBAでIE操作「開いているIEを掴む」リモートサーバーに接続できないエラー対策

IEが表示されているにも関わらず、リモートサーバーがないエラーが出る

Excel VBAマクロでIEを自動操作する際、エラーが出て止まってしまうケースの対応策です。
他のエラーはこちらの記事を参照にどうぞ。

問題点

「実行時エラー’462′:リモートサーバーがないか、使用できる状態ではありません。」
の実行時エラーが頻繁に表示される場合、VBAがIEをうまく掴めていないかもしれません。
(毎度同じタイミングで上記エラーが出る場合は、別問題でコードの問題かもしれません)

対応策

都度、前面に表示されているInternet ExplorerをVBAで掴みなおすことで、動作が安定します。
私は、エラーが出やすいサイトや環境の場合、IEの読み込み表示待ち(Call_IE_WaitTime)の時に、掴みなおすようにしています。

リモートサーバーがないエラー対策のサンプルコード

'■InternetExplorerで再度、objIEをSetしなおす。
Sub sample_IE_shell_set_objIE()
 
    Dim objIE As InternetExplorer
    Dim win As Object
    Dim winshell As Object
    Set winshell = CreateObject("Shell.Application")
    
    '■IEを起動
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
 
    '■指定したURLに飛び、Webサイトの表示を待つ
    objIE.navigate "https://vba-create.jp/"
    
    '■シェルオブジェクトを使用し、IEを再度掴みなおす。
    For Each win In winshell.Windows
        If win.Name = "Internet Explorer" Then
            Set objIE = win
            Exit For
        End If
    Next
    
    '■IE読み込み表示待ち
    Do While objIE.Busy = True
        DoEvents
    Loop
    Do While objIE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
End Sub

その他

こちらはIEを掴みなおす動きをします。
=現在開いているタブとは別のタブでページを開いた際も、こちらのコードを使用します。
=別のタブをobjIEにSetしなおさないと、現在のタブがobjIEのままになってしまいます。
IEを掴みなおさないと、正常に動作しません。

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました