IEでテキストボックス入力しても認識できない
Excel VBAマクロでIEを自動制御する際、SendKeysやValueで値を反映したにもかかわらず、
submitボタンを押下すると、入力が反映されていたにも関わらず認識できていないケースはないでしょうか。
原因はJavaScriptが正常に動作していないからです。
ヤフオクの出品ページではその問題が発生します。ヤフオクの出品ページをサンプルに解決方法を記載します。
JavaScript(JS)を強制発火させる
'■ヤフオク出品ページでJavaScriptを強制発火する Public Function Call_sample_javascript_initEvent() Dim objIE As Object Dim evt As Object '■IE生成→指定URLへ飛ぶ Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://auctions.yahoo.co.jp/sell/jp/show/submit?category=0" Call_IE_WaitTime Set evt = objIE.document.createEvent("HTMLEvents") evt.initEvent "change", True, False '■送料落札者負担 objIE.document.getElementById("shipping_other_check1").Click objIE.document.getElementById("auc_shipname_standard1").Value = "定形郵便" objIE.document.getElementById("auc_shipname_standard1").dispatchEvent evt '■送料 objIE.document.getElementById("auc_shipname_uniform_fee_data1").Value = "84" objIE.document.getElementById("auc_shipname_uniform_fee_data1").dispatchEvent evt End Function
注意点
- JavaScriptの強制発火は以下のようなコードを作成します。
Set evt = objIE.document.createEvent("HTMLEvents") evt.initEvent "change", True, False objIE.document.getElementById("xxxx").dispatchEvent evt
- こちらのコードだけでは動作しません。
下記の読み込み待ちのパーツ化したコードが必要です。
VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】 - 上記ページはログイン状態前提です。ログインしていないと正常に動作しません。
- プレミアム会員でない場合は、上記コードでは動作しません。
コメント