質問: エクセルVBAでIEを操作する方法について教えて下さい。 現在FocusがあるボタンのsourceIndexを取得する方法を知りたいです。 コマンドはありますか? 【背景】 複数ボタンがあるページにて、 特定の条件を満たす特定のボタンを押下したいのですが、 所望のボタン部分の生成がAjax的に動的に表示をしているせいか、 objIE.Document.all.Item("ボタンの名前") の取得が失敗します(objIE.Refresh等の後waitを挟んでもダメ)。 このため、静的なボタンにFocusを移し、そこから sendkeysにてTABでFocusを移して Enterキーをsendkeysしてボタンを押したいと考えているのですが、 問題点として、押したいボタンの近くにある文言が所望の文言と一致していることの確認が必要です。 このため、一度ボタンのsourceIndexを取得してその手前の要素を参照する必要があります。 これ以外のアルゴリズムもいくつか試しましたが、ぱっとするものは見当たりません。 よろしくお願いします。 検索用キーワード:objIE, objDOC, EXCEL VBA, マクロ
回答: sourceIndex を取得する方法ではありませんが。 > 所望のボタン部分の生成がAjax的に動的に表示をしているせいか、 > objIE.Document.all.Item("ボタンの名前") > の取得が失敗します(objIE.Refresh等の後waitを挟んでもダメ)。 > > all コレクションを使うのではなく、getElementById メソッドか、getElementsByName を使えば大丈夫なはずです。 押したいボタンに id 属性がついているなら、こっちを推奨。 ``` ' id 属性を指定する Set btn = objIE.Document.getElementById("button01") ``` getElementsByName は、複数の s がついてる通り、コレクションを返します。 name 属性がユニークだったら、こんな感じでいけるはず。 ``` ' name 属性を指定する Set btn = objIE.Document.getElementsByName("button01").Item(0) ```