概要: |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
<IE ラジオボタン(RADIO)の.Checkedと.Clickの違い>
どうも、三流プログラマーのKen3です。 今回は、 ラジオボタンを探ってみます。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba148.lzh にvba148.xls(Excel2000版)が保存されています。 ※自分でテストページを作ったりして、遊んでみてください。 関連項目、 VBAでInternetExplorer.Applicationを操作する(IE操作) http://www.ken3.org/cgi-bin/group/vba_ie.asp もヨロシクね。/* * 1.今回のキッカケ */
VBA系の掲示板に来た質問です。 ---- WebBrowserコントロールからラジオボタン選択がうまくできません。 Googleの先頭ページのラジオボタン選択は過去ログを拝見してうまくできました がうまくできないページがあります。その他のラジオボタン選択方法についてよ ろしければ教えて下さい。 ---- と もらった質問にいつものように、質問に質問で返し(オイオイ) ※出来るだけ、質問に質問で返さないように心がけてるんだけど・・・ ---- こんな質問返しをしてみたり --- できたら、うまく行かなかったページの HTMLのフォーム部分だけでもUPしてもらえると、 何かしらアドバイスできるかもしれません。 ----/* * 2.問題のページのソースファイル */
http://www.ken3.org/vba/test148.html に質問者からのHTMLをUPしました。下記のような感じのHTML文です。 <HTML> <BODY BGCOLOR="#ffffff"> <TABLE BORDER=0 frame="border"> <TR> <TD> <DIV ALIGN=LEFT> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a1" tabindex="1" onClick="clickradio()" CHECKED><font size="3" color="#0066ff"><b>すみれ</b></font> </DIV> </TD> <TD> <DIV ALIGN=CENTER> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a2" tabindex="1" onClick="clickradio()" ><font size="3" color="#0066ff"><b>たんぽぽ</b></font> </DIV> </TD> <TD> <DIV ALIGN=RIGHT> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a3" tabindex="1" onClick="clickradio()" ><font size="3" color="#0066ff"><b>ひまわり</b></font> </DIV> </TD> <TD> <DIV ALIGN=RIGHT> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a4" tabindex="1" onClick="clickradio()" ><font size="3" color="#0066ff"><b>チューリップ</b></font> </DIV> </TD> </TR> </TABLE> </BODY> </HTML> ぱっと見、フォーム?<FORM>使っていないのかなぁ?まぁいいや、 ^^^^^^^^^^^^^^^^^^^^^^^^^^/* * 3..allから選択してみる */
_________________________ ---- 余談 ハマった話 ---- ~~~~~~~~~~~~~~~~~~~~~~~~~ INPUT type=radio Element | input type=radio Object http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/input_radio.asp を見ると、ラジオボタンは、 .Checked = True / False なんですね。 objIE.document.all.memo.Value = strPARA '感想をセット と同様に objIE.document.all.kubun.Value = "VBA" としたら、ダメだった・・・ なので、ループで探して、 .Checked = True としてます。 ※意外とハマリマシタ(笑) なんて感じで、 ラジオボタンのプロパティは.Checked = True / False ですよ と 偉そうに、 No.144 IE PostData付でURLを開く(データをPostする) http://www.ken3.org/backno/backno_vba29.html#144 で、書いてました。 Form(0)のループでフォームの構成要素から下記のようにして探していました。 '区分を探してセットする For Each objITEM In objIE.document.Forms(0) 'フォームのオブジェクトでループ '名前がKUBUNで値がVBAのラジオボタンを探す If objITEM.Name = "KUBUN" And objITEM.Value = "VBA" Then objITEM.Checked = True 'セレクト状態をtrueにする End If Next 今回は、 フォームが無さそうなので、同様に.Allから探してみました。 ^^^^^^^^^^^^^^^^^^^^^^^^ Dim strRADIO(0 To 3) As String 'ラジオボタンの値 '変数の初期化 strRADIO(0) = "a1" 'すみれ strRADIO(1) = "a2" 'たんぽぽ strRADIO(2) = "a3" 'ひまわり strRADIO(3) = "a4" 'チューリップ '種類を選択してみる strWORK = InputBox("0すみれ 1たんぽぽ 2ひまわり 3チューリップ どれ?", , "0") nNO = Val(strWORK) If nNO < 0 Or nNO > 3 Then nNO = 0 '範囲外の時、番号を0にする End If なんて感じで、探したいa1〜a4を入力させ、 '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True 'セレクト状態をtrueにする End If Next とすると、見事にエラーが発生する。 オブジェクトはこのプロパティ・メソッドをサポートしてません ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ えっ?なんで? まぁ、文句言わないで、デバック押しますか。 If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then ここがエラーです。 う〜ん、なんだろうねぇ? プロパティがないのかぁ、.Nameにアクセスできないのか。 あっ、.Nameって<INPUT>のタグとか<FORM>とかの名前しかないのか。 試しにどのタグでこけたか見てみたかったので、 イミディエイト ウインドウで見てみると、 ? objitem.tagname HTML あらら、頭でエラーかよ。 たしかに<HTML>のタグは、.Nameを持っていないよね。 ※<HTML Name="AAAA">なんて無いよね・・・ ↑見せたくないエラーのイメージです(笑) とすると、 objITEM.Nameの前に、.TAGNameでINPUTのタグがチェックして、 それから、.Name = "sentaku" と.Value = strRADIO(nNO)をチェックしますか。 ※各タグによって、持っているプロパティが違うので、先にタグをチェックする '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.TAGName = "INPUT" Then 'まず、タグでINPUTか判断 Debug.Print objITEM.Name 'TESTで値を表示 Debug.Print objITEM.Value 'TESTで値を表示 If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True 'チェック状態をtrueにする End If End If Next ↑こんな感じで、.TAGName="INPUT"でチェック後に .Name .ValueへアクセスしているのでOKです。 'IEラジオボタンをチェック(.Checked=True)するサンプル
Sub TEST_RADIO_Checked() Dim strURL As String Dim objIE As Object Dim objITEM As Object Dim strAAA As String Dim nNO As Integer '選択値を数値にしたいので Dim strWORK As String 'ワーク変数 Dim strRADIO(0 To 3) As String 'ラジオボタンの値 '変数の初期化 strRADIO(0) = "a1" 'すみれ strRADIO(1) = "a2" 'たんぽぽ strRADIO(2) = "a3" 'ひまわり strRADIO(3) = "a4" 'チューリップ '種類を選択してみる strWORK = InputBox("0すみれ 1たんぽぽ 2ひまわり 3チューリップ どれ?", , "0") nNO = Val(strWORK) If nNO < 0 Or nNO > 3 Then nNO = 0 '範囲外の時、番号を0にする End If 'IEオブジェクトの作成 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True 'テストの選択ページを開く strURL = "http://www.ken3.org/vba/test148.html" objIE.Navigate "" & strURL 'アドレスを渡し表示する '表示完了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents 'ただ待ってるのつまらないので、タイトルバーをイタズラ If strAAA <> Format(Now(), "SS") Then strAAA = Format(Now(), "SS") '現在の秒数を代入 Application.Caption = Now() & "読み込み処理待ちです" End If Loop Application.Caption = "読み込みは終了" '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.TAGName = "INPUT" Then 'まず、タグでINPUTか判断 Debug.Print objITEM.Name 'TESTで値を表示 Debug.Print objITEM.Value 'TESTで値を表示 If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True 'チェック状態をtrueにする End If End If Next '終了メッセージ MsgBox "データが選択されたか、確認してください" End Sub |
Sub TEST_RADIO_Click() Dim strURL As String Dim objIE As Object Dim objITEM As Object Dim strAAA As String Dim nNO As Integer '選択値を数値にしたいので Dim strWORK As String 'ワーク変数 Dim strRADIO(0 To 3) As String 'ラジオボタンの値 '変数の初期化 strRADIO(0) = "a1" 'すみれ strRADIO(1) = "a2" 'たんぽぽ strRADIO(2) = "a3" 'ひまわり strRADIO(3) = "a4" 'チューリップ '種類を選択してみる strWORK = InputBox("0すみれ 1たんぽぽ 2ひまわり 3チューリップ どれ?", , "0") nNO = Val(strWORK) If nNO < 0 Or nNO > 3 Then nNO = 0 '範囲外の時、番号を0にする End If 'IEオブジェクトの作成 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True 'テストの選択ページを開く strURL = "http://www.ken3.org/vba/test148.html" objIE.Navigate "" & strURL 'アドレスを渡し表示する '表示完了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents 'ただ待ってるのつまらないので、タイトルバーをイタズラ If strAAA <> Format(Now(), "SS") Then strAAA = Format(Now(), "SS") '現在の秒数を代入 Application.Caption = Now() & "読み込み処理待ちです" End If Loop Application.Caption = "読み込みは終了" '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.TAGName = "INPUT" Then 'まず、タグでINPUTか判断 Debug.Print objITEM.Name 'TESTで値を表示 Debug.Print objITEM.Value 'TESTで値を表示 '↓の条件でクリックするオブジェクトを探す If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Click '素直にクリックしてみた(笑) Exit For '目的の処理が終わったので、ループを抜ける End If End If Next '終了メッセージ MsgBox "データが選択されたか、確認してください" End Sub |
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。