[[20190222103201]] 『VBAによるIE自動制御でIEバージョンによりエラーax(K0222) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAによるIE自動制御でIEバージョンによりエラーになります』(K0222)

お世話になります。

VBAによるIE自動制御でIEバージョンによりエラーになります。

VBAによるIE自動制御
以下のWEBページを参考にしました。
https://vba-code.net/ie/click-a-button/

16行目 objIE.Document.getElementById("q").Value = "VBA"
IE8(OS:WindowsXP)では正常に検索窓に「VBA」が"VBA"自動入力されますが、
IE11(OS:Windows10)では検索窓に「VBA」が"自動入力されず「実行時エラー"424" オブジェクトが必要です。」になります。

よろしく、お願いいたします。
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
'Sub GoogleSearch()  

  '  ↓ 変更
Private Sub Command1_Click()

   Dim objIE As Object

    'IE起動
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    'Googleに接続
    objIE.navigate "https://www.google.co.jp/"

    'IEを待機
    Call IEWait(objIE)

    '検索窓に「VBA」と入力
   'objIE.Document.getElementById("gbqfq").Value = "VBA" 
    '    ↓ 変更
    objIE.Document.getElementById("q").Value = "VBA"

    '5秒停止
    Call WaitFor(5)

    '検索ボタンを押す
    Call IEButtonClick(objIE, "Google 検索")

    '5秒停止
    Call WaitFor(5)

    'IE終了
    objIE.Quit

    Set objIE = Nothing
End Sub

'ボタンを押す関数
Public Function IEButtonClick(ByRef objIE As Object, buttonValue As String)

    Dim objInput As Object

    For Each objInput In objIE.Document.getElementsByTagName("INPUT")
        If objInput.Value = buttonValue Then
            objInput.Click
            Exit For
        End If
    Next
End Function

'IEを待機する関数
Function IEWait(ByRef objIE As Object)

    Do While objIE.Busy = True Or objIE.readyState <> 4
        DoEvents
    Loop
End Function

'指定した秒だけ停止する関数
Function WaitFor(ByVal second As Integer)

    Dim futureTime As Date

    futureTime = DateAdd("s", second, Now)
    While Now < futureTime
       DoEvents
    Wend
End Function

'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 ※誤りがありましたので訂正させてもらいました。

 訂正前・・・「実行時エラー"424" オブジェクトが必要です。」
    ' ↓
 訂正後・・・実行時エラー 'Busy' メソットは失敗しました:'IWebBrowser2' 
 オブジェクト

 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 ''Busy' メソットは失敗しました:'IWebBrowser2' オブジェクト
 '
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 '
 'IEを待機する関数
 Function IEWait(ByRef objIE As Object)
     Do While objIE.Busy = True Or objIE.readyState <> 4
         DoEvents
     Loop
 End Function
 '
 '''''''''''''''''''''''''''''''''''''''''''''''''''''''

 申し訳ありませんでした。
(K0222) 2019/02/22(金) 11:14

あー、googleはいろいろやっているので、HTMLがよく変わるんですよね。 今でもIE8なら正常動作するのであれば、ブラウザバージョンによって中身を変えてきた、ということですね。

とりあえず、IE11なら、以下に変えると通りました。

    objIE.Document.getElementsBytagname("input")(2).Value = "vba"

2番目決め打ちしていますが、inputタグ数分ループしつつ、.Name が "q" のものを探して、これに代入する方が確実かと思います。 ソース上は、以下のようになっていました。
<input class="gLFyf gsfi" maxlength="2048" name="q" type="text" jsaction="paste:puy29d" aria-autocomplete="both" aria-haspopup="false" autocapitalize="off" autocomplete="off" autocorrect="off" role="combobox" spellcheck="false" title="検索" value="" aria-label="検索">
(???) 2019/02/22(金) 11:37


別案。 ID指定ではなく、名前指定なら、IE11でも動きましたよ。 この方が簡単で良さげ。
 Sub test()
    Dim IE As Object

    Set IE = CreateObject("InternetExplorer.application")
    IE.Visible = True
    IE.Navigate "https://google.co.jp"
    Do While IE.Busy = True Or IE.readyState <> 4
        DoEvents
    Loop
    IE.document.getElementsByName("q")(0).Value = "VBA"
    IE.document.forms(0).submit
 End Sub
(???) 2019/02/22(金) 14:13

 ??? さん

 解決することができました。

 ご回答してもらいまして、ありがとうございました。

 >googleはいろいろやっているので、HTMLがよく変わるんですよね。
 はい、同じく思っていました。

 >とりあえず、IE11なら、以下に変えると通りました。 
 > objIE.Document.getElementsBytagname("input")(2).Value = "vba"
 IE11で動作確認できました。IE8では動作確認できませんでした。

 >別案。 ID指定ではなく、名前指定なら、IE11でも動きましたよ。 この方が簡 
 単で良さげ。 
 >IE.document.getElementsByName("q")(0).Value = "VBA"
 IE11、IE8の両方で動作確認できました。

 下記の方法を使いたいと思います。
 IE.document.getElementsByName("q")(0).Value = "VBA"

 お世話になりました。感謝申し上げます。

(K0222) 2019/02/22(金) 15:22


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.