- ベストアンサー
Web上のチェックボックスにフォーカスをあてたいのですが
- エクセル2003のVBAでWeb上のチェックボックスにフォーカスをあてる方法がわからない。
- IE6のグーグルで検索したWebページ上のチェックボックスにカーソルをあてたいが、コードではチェックボックスを取得できない。
- Webページ上のチェックボックスを確実に取得する方法はあるか。アドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コードがややこしそうなので詳しくは拝見しておりませんが。。。 先ず、「単純に開いた Web ページを操作する」のでしたら、「IEのウィンドウハンドルを取得」する必要はないように存じます。 「IE6」とのことですが、「IE7」以上の「新しいタブ」機能を利用する場合ではそれもあるかなぁ。。。という感じです。 経験上、 Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .navigate "ht" & "tp://players.music-eclub.com/?action=search_song_detail" While IE.Busy Or IE.ReadyState <> 4: DoEvents: Wend .Document.forms.Item(1).Item(25).Checked = True End With Set IE = Nothing みたいな感じで、[楽器] - [キーボード] - [ピアノ] にチェックを付けることはできます。 「エクセル2003のVBA」でしたら、「IE.Document.forms」を ウォッチ式 に追加して、「Item」の インデックス をこまめに見ていくのが簡単でしょうか(#ホントは、もっと的確な手段もあるかもですが。。。)。 ちなみに、『「Item」の インデックス』が ウォッチウィンドウ で「Item 1」と表示されていれば、コーディング上では、「Item(0)」のようになります。
その他の回答 (2)
- DOUGLAS_
- ベストアンサー率74% (397/534)
[回答番号:No.1・2] の DOUGLAS_ です。 >For文でエラーがでてしまい。 WebBrowser コントロール 関係で「オブジェクト変数、またはWithブロック変数が設定されていません。」が出るとき、ありがちなのは、 While IE.Busy Or IE.ReadyState <> 4: DoEvents: Wend が入っていない場合ですが、更に、私は、おまじない的に、その次の行に Application.Wait (Now + TimeValue("0:00:05")) を入れたりします。 Web ページ は、一つひとつ、皆、作りが異なります。 Set elm = IE.Document.getElementsByTagName("INPUT") 以下のコードを下記で確認してみてください。 「elm(i).Name = "q"」としていらっしゃいますが、そのページに必ずその要素があると分かっていらっしゃるのならよいのですが、「Name = "q"」は HTMLタグ から取得されたのでしょうか? For i = 0 To elm.Length - 1 If elm(i).Type = "checkbox" Then Debug.Print i & ":" & elm(i).Name elm(i).Checked = True End If Next i
お礼
For文にエラーが出るページは、 おまじないの時間待機部分を入れるとばっちりいけました! ありがとうございます。 非常に助かりました。
- DOUGLAS_
- ベストアンサー率74% (397/534)
[回答番号:No.1] の DOUGLAS_ です。 >APIで開いているウィンドウを全面に表示させていたのです この手のご質問は、開いている Web ページのアドレスが分からないと、問題の解決も遅れるばかりですが。。。 まぁ、他人には知らせたくないアドレスでしょうから、敢えてお尋ねもいたしません。 >Item(1).Item(25)の意味がわからない [回答番号:No.1] で例示したコードは試行していただいたでしょうか? 前回答のコードをそのまま試行していただくと、MySound(Online Music Store) の「詳しい検索」というページが開き、 >、[楽器] - [キーボード] - [ピアノ] にチェックを付けることはできます。 Item(1).Item(25) を Item(1).Item(26) に変えると、[ピアノ] の次の [オルガン] の チェックボックス が オン になります。 ddtqp さんが、どの Web ページ の、どの チェックボックス に フォーカス を当てたいと思っていらっしゃるのかは、当方には分からないことですので、前回答にも書きましたように、 >「IE.Document.forms」を ウォッチ式 に追加して、 >「Item」の インデックス をこまめに見ていく ことになろうかと存じますね。
補足
>「単純に開いた Web ページを操作する」のでしたら、「IEのウィンド>ウハンドルを取得」する必要はないように存じます。 Set IE = CreateObject("InternetExplorer.Application") を使用すると新しくウィンドウが開いてしまいますので、 APIで開いているウィンドウを全面に表示させていたのですが、 言われてみればと思い以下のコードで書き直して見ました。 書き直したコード----------------------------------------------- Dim Browser As Object Dim elm As Object Dim objShell As Object Dim ShWins As Object Dim IE As Object Set objShell = CreateObject("Shell.Application") Set ShWins = objShell.Windows() For Each Browser In ShWins Set IE = Browser Exit For Next '次の画面が表示されるまで待機 While IE.Busy Or IE.ReadyState <> 4: DoEvents: Wend IE.Visible = True 'Set elm = IE.Document.getElementsByTagName("INPUT") Set elm = IE.Document.forms.Item(i) '.Item(25).Checked = True For i = 0 To elm.Length - 1 'If (elm(i).Name = "q") Then elm(i).Focus: Exit For MsgBox "Name=" & elm(i).Name Next i ----------------------------------------------- For文でエラー(オブジェクト変数、またはWithブロック変数が設定されていません。)がでてしまい。 どうやって直してよいのかわかりません。 正常に動作するウィンドウもあるのですが。。。 また、Item(1).Item(25)の意味がわからないので 教えていただけませんでしょうか。 お手数をおかけしますがどうぞよろしくお願いします。