揮発性のメモ2

http://d.hatena.ne.jp/iww/

vbaでIEを起動しログイン処理などをしてページ遷移をすると、それ以上処理できなくなる

vbaIEを起動しログイン処理などをしてページ遷移をすると、それ以上処理できなくなる。
オブジェクトがページ遷移についていかない感じ


Excel2013のVBAのバグらしい

Sub main()
    Dim objIE As InternetExplorer
    
    ' IE起動
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True 'デバッグ用可視化
    ' URL指定
    objIE.navigate ("http://192.168.0.2")
    Call waitIE(objIE)
    
    '■ログイン処理
    Set loginform = objIE.document.forms(0)
    loginform.loginid.Value  = "hogehoge"
    loginform.Password.Value = "piyopiyo"
    loginform.submit
    Call waitIE(objIE)
    
    '1秒待つ (念の為)
    Application.Wait Now + TimeValue("00:00:01")
    
    'objIEが遷移前の古いページのまま
    MsgBox (objIE.LocationURL)
    '閉じても閉じてくれない
    objIE.Quit() 
End Sub



' IEが落ち着くまで待つ
Sub waitIE(ByRef objIE As InternetExplorer)
    While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Wend
End Sub

Excel2013の場合、リンクをクリックした直後、IEオブジェクトが リンククリック前とクリック後の2つ存在することがわかった。
なので、ページ遷移後には Shell.Application で一覧から 遷移後っぽいURLを指しているオブジェクトを探さなければならない。