エクセルVBAでIEを操作する方法について教えて下さい。


現在FocusがあるボタンのsourceIndexを取得する方法を知りたいです。
コマンドはありますか?

【背景】
複数ボタンがあるページにて、
特定の条件を満たす特定のボタンを押下したいのですが、
所望のボタン部分の生成がAjax的に動的に表示をしているせいか、
objIE.Document.all.Item("ボタンの名前")
の取得が失敗します(objIE.Refresh等の後waitを挟んでもダメ)。

このため、静的なボタンにFocusを移し、そこから
sendkeysにてTABでFocusを移して
Enterキーをsendkeysしてボタンを押したいと考えているのですが、
問題点として、押したいボタンの近くにある文言が所望の文言と一致していることの確認が必要です。

このため、一度ボタンのsourceIndexを取得してその手前の要素を参照する必要があります。
これ以外のアルゴリズムもいくつか試しましたが、ぱっとするものは見当たりません。
よろしくお願いします。

検索用キーワード:objIE, objDOC, EXCEL VBA, マクロ

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/25 16:23:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

ポイント100pt

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)
id:id0010

ありがとうございます。
ご指摘のコードで確かにコレクションが得られました。

2013/01/25 16:23:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません