概要: |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
<IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True>
どうも、三流プログラマーのKen3です。 今回は、 掲示板でもらった質問、 IEを起動してSELECTタグのoptionを選択 を少し、探ってみたいと思います。 いつものように、たいした解説、回答内容じゃないので、 暇つぶしに休み時間などに拾い読みしてください。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba110.lzh にtest110-book.xlsが保存されています。/* * 1.今回のキッカケ */
掲示板に下記の質問をもらいました。 ---- > すみません。どうしても分からなかったので質問します。 > AccessからIEを起動してフォームに値を入れるというのは > 前回のめるまがでとても参考になりました。ありがとうございます。 > で、そこからなんですが、ドロップダウンの値を直接指定して入力 > することはできるんでしょうか。 > 【ソース例】 > <SELECT name="ken"> > <option value="1">1</option> > <option value="2">2</option> > <option value="3">3</option> > </SELECT> > Htmlソースは上の感じなんですが、これを > objIE.document.all.ken.value = "3" > と指定するとエラーが出ます。 > 指定の仕方が違うと思うのですが、検索しても分からなかったのです。 > プロの人だと「当たり前じゃねえか」と思われるかも知れませんが > 宜しくお願い致します。 ---- なんで、 > プロの人だと「当たり前じゃねえか」 なんて私は、思ったりしないんだけど、 あと、ご教授くださいとか多いんだろう?・・・・ それだけお偉いプログラマー様の回答者が世の中多いんだろうけど。。。 そんな偉いシステム屋さんと私も、同じ扱いを受けて光栄です そこまでレベル上げたいよね、 じゃなくって、なんか悲しいよね(涙) ※全体に言っている独り言なので、質問者の人には言ってないので、 気にしないでね(聞いてほしい独り言が多いってば・・・) 文句を言いたいのは、お偉い回答者さん達とそれを支える熱狂的なご教授信者さん まぁ、そんなこと言っててもダメってのがツライよね。 また、ある掲示板へ戦いにじゃなくって宣伝に行くかな(ある掲示板って?どこ?) えっ、ハヤク解説始めろって? 質問の回答以外は聞きたくも無いって? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ それが三流作者のメルマガの特徴なので。 いつもの前置きが長かったですね(謎?)/* * 2.語学力無いので、かなり苦戦する(笑) */
そんなの「当たり前じゃねえか」とは、言えないぐらいに苦戦しました(笑) いろいろと試行錯誤するが私も出来なかった。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 一流読者の人に、私も、そんなの「当たり前じゃねえか」なんて言われてんだろうなぁ と思いつつ、調べ始めます。 ※なかなか最後まで行き着かないので、 先に回答の3.サンプルを見たほうがいいかも。 で、見てからこちらに戻ってきてください。 IE ドキュメントオブジェクトは、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 私のパターンは、下記のリンクから探り始めてます。 http://msdn.microsoft.com/workshop/browser/webbrowser/reference/properties/document.asp を見ると、 Microsoft Visual Basic programs that early bind to the HTMLDocument object can reference it through the IHTMLDocument, IHTMLDocument2, and IHTMLDocument3 interfaces. HTMLDocument objectは、 IHTMLDocument IHTMLDocument2 IHTMLDocument3 なんて、インターフェース?を持ってんの?だからなに? ※ここから下も勝手な和訳が続くので適当に読んでね。 (Ken3の独り言が続く(笑)) IHTMLDocument2 に .allがあって http://msdn.microsoft.com/workshop/browser/mshtml/reference/ifaces/document2/get_all.asp を見ると、 You can use the IHTMLElementCollection::length property to determine the number of element objects in the collection, and the IHTMLElementCollection::item or IHTMLElementCollection::tags function to retrieve individual objects or collections of objects from the collection. You can 何いってんのか、わかんないよ。 日本に来たら、日本語話せよとコンビニ店長時代ならレジ打ったあと言ってたけど、 .comに来たら、英語ぐらい読めと言われそう・・・ なんて話は置いといて、 IHTMLElementCollection って、Elementのコレクションがあるんだってさ。 オブジェクトって階層構造になっていて、 コレクションが階層構造になっているのと、 一番下にプロパティやメソッドがあるので、 それをイメージしながら探ると、英語読めなくても探れると思う。 ※ExcelならExcelアプリの下にブックがあってシートにセル、 セルは値や書式を持っている(プロパティ)、 セルのクリアやコピーの動作(メソッド)がある なんてのが基本です。 *途中のブックにたいして、Saveなどのメソッドもあり、 一番下だけにプロパティ・メソッドがあるんじゃないことも注意かなぁ。 Document.All は、そんなコレクションからできてるんだってさ。 ^^^^^^^^^^^^^^^^^ だからなんだっつうの・・・オレは三流プログラマーだってばさ、 英語なんか読めないよ。 ハヤクサンプルソースまでたどり着きたい・・・ で、ここがDHTMLのオブジェクトだって・・・ http://msdn.microsoft.com/workshop/author/dhtml/reference/objects.asp おっ、ここに、HTMLでよく見かけるタグが存在する。 やっとたどり着いた? ※ここ、新たなブックマーク候補です。 ここから調べると、タグ単位で探りやすそうです。 相変わらず英語だけど、いろいろと出てきた。 input Creates a variety of form input controls. input type=button Creates a button control. input type=checkbox Creates a check box control. input type=hidden Transmits state information about client/server interaction. などなど、いろいろあるけど、 目的のオブジェクトは、 ~~~~~~~~~~~~~~~~~~~~~~ SELECT タグのOPTIONでしたね。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ option Denotes one choice in a SELECT element. http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/option.asp にやっと書いてありました。 Syntax HTML <OPTION SELECTED ... > Scripting OPTION.selected [ = bSelected ] Possible Values bSelected Boolean that specifies or receives one of the following values.false Default. Item is not selected as the default. true Item is selected as the default. よくわかんないこと書きやがって、、、 えっと、 OPTION.selected = bSelected と代入しろだって? で、bSelected Booleanだって? だったら初めから、 OPTION.selected = True/Falseって書けよ、、と怒り出すぞオイ。/* * 3.サンプルを作成して、テストする */
http://www.ken3.org/vba/test110.html に、下記のテスト用HTMLを書きました。 <html> <head> <title>IE SELECT への セットをテストするためのHTML</title> </head> <body bgcolor=#ffffff text=#000000> <hr> <h1>IE SELECT への セットをテストするためのHTML</h1> <hr> <FORM ACTION="http://www.ken3.org/cgi-bin/test/test041-1.asp" METHOD="POST"> <font color="blue">TYPE=SELECT の入力テスト</font><br> <br> あなたの好きなセリーグの球団は? <SELECT name="ken"> <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> <br> 感想: <SELECT name="kansou"> <option value="3">IE最高</option> <option value="2">MSは日本語技術情報ハヤク作れ</option> <option value="1">イヤもっと英語力付けろ</option> <option value="0">メルマガふざけないで・・・まじめに書け</option> </SELECT> <br> <INPUT TYPE="submit" NAME="btn" VALUE="送信"> <INPUT TYPE="reset" VALUE="入力し直す"> </FORM> </body> </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> Excelでテストルーチンを作成。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 6番の横浜を選択してみます。
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 '全ての項目を調べる For i = 0 To objIE.Document.all.Length - 1 'インプットのタグか?.tagnameを見る Debug.Print i & ":" & objIE.Document.all(i).tagname If objIE.Document.all(i).tagname = "OPTION" Then 'さらに、値が6(横浜)かチェックする If objIE.Document.all(i).Value = "6" Then 'ここまで調べて、チェックを付ける objIE.Document.all(i).Selected = True End If End If Next i End Sub |
以下のようにSELECT タグの下をチェックするのがスマートだと思います。
Sub setSelect(objElement As Object, nValue As String)
' Webフォームのコンボボックスを選択する
For Each objOpt In objElement.tags("OPTION")
If objOpt.Value = strValue Then
objOpt.Seleted = True
End If
Next
End Sub
' 呼び出し
set objElement = objIE.Document.GetElementsByName("ken")(0)
Call setSelect(objElement, "1")
---ホームページに来た質問 ---- > <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 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。