[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
とりあえず、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
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.