概要: |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
<IE SELECTタグの選択 .SelectedIndex=nで選択>
どうも、三流プログラマーのKen3です。 今回は、 SELECT タグを探ってみます。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba154.lzh にvba154.xls(Excel2000版)が保存されています。 ※自分でテストページを作ったりして、遊んでみてください。 関連項目、 VBAでInternetExplorer.Applicationを操作する(IE操作) http://www.ken3.org/cgi-bin/group/vba_ie.asp もヨロシクね。/* * 1.今回のキッカケ */
VBA系の掲示板で、SELECTタグOPTIONの選択でJavaScriptが起動しない、 そんな問題にぶちあたりました。 もらった質問に対して、いつものように、違う方向に進んでいるんだけど。 今回、 実は、読者からの質問で、 自分だけが得してしまった情報/気が付いたプロパティを書いてみます。 ^^^^^^^^^^^^^^^^^^^^^^^^ 下記がもらった質問です。 ---- <FORM name=form1 onsubmit="mai('s');return false;"> <TBODY> <TR> <TD><B>場名</B><BR> <DIV align=right><SELECT onchange=Rdp(); name=JYO> <OPTION value=0 selected>選択項目 </OPTION></SELECT></DIV></TD></TR> <TR> <TD><B>レース</B><BR> <DIV align=right><SELECT onchange=Hdp(); name=Race> <OPTION value=0 selected>選択項目 </OPTION></SELECT></DIV></TD></TR> <TR> あるサイトの一部ぬきだしました。 ここで、おそわったのを、まねして WB1.Document.form1.jyo.selectedIndex = 1 WB1.Document.form1.jyo.Options(1).selected = "selected" WB1.Document.form1.jyo.Options(1).selected = True と、やると、コンボに選択された文字がでました。成功!と おもいきや、つぎのレースの選択項目が、からっぽです。 ためしに、マウスでクリックすると、選択項目が、 ふくまれます。documentも、かわるようです。 どうやら、onchangeが、おきてないためらしい。 これについて、いろいろ、しらべたけど、わかりません。 疑問1:rdp()という関数は、どこにあるんでしょうか。 このhtmlの、最後に、なにか、 scriptが、あるのですが、(よめない) どうも、それではないみたいです。 疑問2: onchangeを、vbから、起こしてやることは できないでしょうか。 ----/* * 2.またまた、脱線昔話、いつになったら本題が完成するの? */
http://www.ken3.org/vba/test110.html の 入力フォーム <SELECT name="ken"> と 項目名はkenにして6球団を選択 <option value="1">阪神</option> <option value="2">中日</option> <option value="3">ヤクルト</option> <option value="4">巨人</option> <option value="5">広島</option> <option value="6">横浜</option> </SELECT><br> <SELECT name="kansou"> と 項目名はkansouにして3〜0を選択 <option value="3">IE最高</option> <option value="2">MSは日本語技術情報ハヤク作れ</option> <option value="1">イヤもっと英語力付けろ</option> <option value="0">メルマガふざけないで・・・まじめに書け</option> </SELECT> に対して、SELECT OPTIONを選択する時、 私は、下記のような感じで選択してました。 No.110 IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True /vba/backno/vba110.html で、やった方法は、 いま、どのSELECTタグを通過したかを覚えて、 下記のように処理しました。
Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/vba/test110.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '項目名を探して、データをセットする Dim i As Integer Dim strSTAG As String '最近のSELECTタグの名前を保存 '全ての項目を調べる For i = 0 To objIE.Document.all.Length - 1 'インプットのタグか?.tagnameを見る Debug.Print i & ":" & objIE.Document.all(i).tagname If objIE.Document.all(i).tagname = "SELECT" Then strSTAG = objIE.Document.all(i).Name 'SELECT名前を代入 End If If objIE.Document.all(i).tagname = "OPTION" Then 'さらに、値が2と保存したSELECTがKenかチェックする If objIE.Document.all(i).Value = "2" And strSTAG = "ken" Then 'ここまで調べて、チェックを付ける objIE.Document.all(i).Selected = True End If 'さらに、値が1と保存したSELECTがkansouかチェックする If objIE.Document.all(i).Value = "1" And strSTAG = "kansou" Then 'ここまで調べて、チェックを付ける objIE.Document.all(i).Selected = True End If End If Next i End Sub |
Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/vba/test110.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop 'SELECTタグに付いた名前(Name)がKen上から6番目(5)をテストでセット '.SelectedIndexに5をセット(012345で6番目となる) objIE.Document.all.Ken.SelectedIndex = 5 'kansouの上から3番目(2)をテストで選択する.SelectedIndexに2をセット objIE.Document.all.kansou.SelectedIndex = 2 '0からインデックスが始まるのがポイントです↑ End Sub |
ホームページに来た質問 ---- > <select name="abcedfg" class="NEEDOFF"> > <option value=""></option> > <option value="12345678">12345678 東芝 FL32SW</option> > >例えば、7明細の内、1番目のデータを選択する場合の処理についてどの >様にすればよいのでしょうか? > > リストボックス名(インデックス).Selected = True ---- にたいして、↓下記の回答を行った。 こんにちは。 >例えば、7明細の内、1番目のデータを選択する場合の処理についてどの >様にすればよいのでしょうか? > > リストボックス名(インデックス).Selected = True タグがSELECTなので、 <select name="abcedfg" class="NEEDOFF" ここを押さえときます。 [No.110 IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True] http://www.ken3.org/vba/backno/vba110.html .Document.all(n).Selected=Trueを使用して、 フォーム内のSELECT タグのOPTIONを選択・・は、面倒なので(ぉぃぉぃ) ※↑は、見ないで、忘れてください。 [No.154 IE SELECTタグの選択 .SelectedIndex=nで選択] http://www.ken3.org/vba/backno/vba154.html の objIE.Document.all.Ken.SelectedIndex = 5 objIE.Document.all.kansou.SelectedIndex = 2 など、 .SelectedIndexでSELECTタグの項目を選択する方法がいいと思います。 <select name="abcedfg" class="NEEDOFF" なので、 objIE.Document.all("abcedfg").SelectedIndex = 1 でいけるかなぁ。※いけるといいんですが。 あと、Select関係は、 こっちが下から http://ken3-info.blog.ocn.ne.jp/objie/2009/04/2r_option_selec.html ↑OPTIONから攻めてます。 <option value="12345678" >12345678 東芝 FL32SW</option> ↑こちらから攻めたい時など、参考にしてみてください。 うまく説明できませんが、何かの参考となれば、幸いです。 三流プログラマー ken3 質問者より、続きの質問をもらう。。。。 ---- >選択したテーブルの値を確認するのに.VALUE指定を駆使しましたが、 >結果を得ることが出来ませんでした。 > >どの様なコードを記述すれば良いのか、また、IEに関連する推奨教本があり >ましたならば併せて、教えて頂けないでしょうか。 > ><option value="12345678" >"12345678" ← objIE.Document.all("abcedfg").VALUE > >>12345678 東芝 FL32SW</option> >"12345678 東芝 FL32SW" ← コード??????? ---- に対して、下記の回答を行った。 こんちには。 運悪く、一番紛らわしい SELECT OPTION を操作しないといけないとは、、、 同情します、じゃなかった、 日本語で書く OPTIONの値ってのが、 ~~~~~~~~~~~ 曲者で、 値と聞くと、.VALUEなんですが、 もうひとつ、値として使われるのが、 .InnerTEXTかなぁ。 この InnerTEXT(タグの内側のテキスト) が ONTIONタグの中身、中身=値として、使いたい場合もあるってことで、 動画だと、このあたりかなぁ。 http://www.youtube.com/watch?v=QRe8y_BLE3I&feature=channel_page まとまってないけど、 FORM SELECT OPTION の攻略(選択)サンプル http://www.ken3.org/cgi-bin/group/vba_ie_form.asp#Document_Forms_Select の中の先に進んで、 http://www.ken3.org/cgi-bin/group/vba_ie_form.asp#Select_Multiple に .InnerTEXT を 使って、 '.InnerTEXT(表示テキスト)が 愚痴系(GUCHI) のオブジェクトを探す If objOPTION.InnerTEXT = "愚痴系(GUCHI)" Then '.InnerTEXTを見てチェック objOPTION.Selected = True '.Selected = Trueで選択状態にする End If とか、やってます。 もちろん、 .Valueを使って、 '.Value(値)がVBAのオブジェクトを探す If objOPTION.Value = "VBA" Then '.Valueを見てチェック objOPTION.Selected = True '.Selected = Trueで選択状態にする End If も可能です。 'Form(0).All.Tags("OPTION")でOPTIONオブジェクトのみ取り出す For Each objOPTION In objIE.Document.Forms(0).All.Tags("OPTION") '.Value(値)がVBAのオブジェクトを探す If objOPTION.Value = "VBA" Then '.Valueを見てチェック objOPTION.Selected = True '.Selected = Trueで選択状態にする End If '.InnerTEXT(表示テキスト)が 愚痴系(GUCHI) のオブジェクトを探す If objOPTION.InnerTEXT = "愚痴系(GUCHI)" Then '.InnerTEXTを見てチェック objOPTION.Selected = True '.Selected = Trueで選択状態にする End If Next ってことなんで、 ><option value="12345678" >"12345678" ← objIE.Document.all("abcedfg").VALUE 値 valueは、書かれているように、 objIE.Document.all("abcedfg").VALUE >>12345678 東芝 FL32SW</option> ↑12345678 東芝 FL32SW 値 IE上で画面で見えてるテキストは、内側のテキストなので、 objIE.Document.all("abcedfg").InnerTEXT かなぁ。 何かの参考となれば、幸いです。 ※SELECT OPTION の 値が一番厄介だと思うけど・・・うまく組み込めることを願いつつ、失礼します。 三流プログラマー Ken3 あっ、間違えた? objIE.Document.all("abcedfg") ↑、オプションに名前が付いていないから、 SELECTから、ひっぱってくるなら 入力FORM SELECTの情報を取り出す http://ken3-info.blog.ocn.ne.jp/objie/2009/05/form_select_4bd.html .Options(n番目)とか使い、 > <select name="abcedfg" class="NEEDOFF"> > <option value=""></option> > <option value="12345678">12345678 東芝 FL32SW</option> なら、 objIE.Document.all("abcedfg").Options(1).InnerTEXTかぁ。 あっ、1番目とか決まっていないから、 選択されている位置が、.SelectedIndexなので、 n = objIE.Document.all("abcedfg").SelectedIndex を実行後、 objIE.Document.all("abcedfg").Options(n).InnerTEXT かなぁ。 n(選択位置) = objIE.Document.all("abcedfg").SelectedIndex 'SELECTの位置を.SelectedIndexで objIE.Document.all("abcedfg").Options(n).InnerTEXT 'SELECTの.Options(n選択位置)の.InnerTEXT 内側のテキスト これで、やっと、選択されているSELECT OPTIONのテキストがわかるのかぁ。 自分で >運悪く、一番紛らわしい >SELECT OPTION >を操作しないといけないとは、、、 >同情します、 とか言ってて、間違えた・・・スミマセン。 間違いを反面教師の意味をこめて、そのまま、載せときます。。。。(ぉぃぉぃ) このページを見た人が、うまく行き、笑顔で笑えますように、、と思いつつ、失礼します。 ※※やっぱり、三流だなぁ・・・?と、自分自身に言ってみた。
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。