概要: |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
<IE SELECT後 .fireEventでJavaScriptのイベントを起動>
どうも、三流プログラマーのKen3です。 今回は、前回の続きで、 IEでSELECT タグの操作を探ってみます。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba155.lzh にvba155.xls(Excel2000版)が保存されています。 ※自分でテストページを作ったりして、遊んでみてください。 関連項目、 VBAでInternetExplorer.Applicationを操作する(IE操作) http://www.ken3.org/cgi-bin/group/vba_ie.asp もヨロシクね。/* * 1.今回のキッカケ */
VBA系の掲示板 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi で、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から、起こしてやることは できないでしょうか。 ---- それに対して、 http://www.ken3.org/vba/test153.html で、 テストで、下記のjavaScriptを書いてみました。 場名を選択すると、レース内容を変更する<br> <br> <FORM name=form1 onsubmit="mai('s');return false;"> <TABLE BORDER="1"> <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><TD><INPUT TYPE="submit" VALUE="送信"></TD></TR> </TABLE> </FORM> <script type="text/javascript"> //場名を初期化する document.form1.JYO.length = 5; //強引にオブジェクトを増やす(オイオイ) document.form1.JYO.options[1].text = "東京"; document.form1.JYO.options[2].text = "京都"; document.form1.JYO.options[3].text = "中山"; document.form1.JYO.options[4].text = "阪神"; //↑強引に選択肢を増やしてみた(笑) </script> <script type="text/javascript"> <!-- //ここからJavaの関数を書いてみる function Rdp(){ // Rdp 場所が選択されたらレース内容を変更する //レース内容を場所に合わせて変更 document.form1.Race.length = 3; //強引にオブジェクトを3にする(ホントは12R) var n = document.form1.JYO.selectedIndex //場名選択位置を代入 alert("開催選択後、Rdp呼ばれたよn="+n); switch (n) { case 1: //東京なら document.form1.Race.options[0].text = "9R 昇仙峡特別"; document.form1.Race.options[1].text = "10R 奥多摩ステークス"; document.form1.Race.options[2].text = "11R 霜月ステークス"; break; case 2: //京都なら document.form1.Race.options[0].text = "9R もみじステークス"; document.form1.Race.options[1].text = "10R古都ステークス"; document.form1.Race.options[2].text = "11Rマイルチャンピオンシップ(GI)"; break; case 3: //中山なら alert("開催してないよ"); break; case 4: //阪神なら alert("開催してないよ"); break; } } function Hdp(){ // Hdp レースが選択されたら次は?(今回は省略) alert("Hdp呼ばれたよ(レース選択後)"); } function mai(parapara){ // maiイベントのテスト // Submitボタンが押されると、ここが走るのでテストする alert("受け取ったのは"+parapara); } // --> </script> これで、テスト用のHTMLは完成したけど、 本題は、IEからの操作でした。/* * 2..SelectedIndexを使って普通に選択してみる */
.SelectedIndex なんて方法を知ったので、 下記のように組んでみました。
Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ(テストのHTMLを表示する) objIE.Navigate "http://www.ken3.org/vba/test155.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '場名を選択する 'SELECTタグに付いた名前(Name)がJYOの上から2番目(1)をテストでセット '.SelectedIndexに1をセット(012345で2番目となる) objIE.Document.all.JYO.SelectedIndex = 1 'レースを選択する 'Raceの上から3番目(2)をテストで選択する.SelectedIndexに2をセット objIE.Document.all.Race.SelectedIndex = 2 '0からインデックスが始まるのがポイントです↑ End Sub |
Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ(テストのHTMLを表示する) objIE.Navigate "http://www.ken3.org/vba/test155.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '場名を選択する 'SELECTタグに付いた名前(Name)がJYOの上から3番目(2)をテストでセット '.SelectedIndexに2をセット(012345で2番目となる) objIE.Document.all.JYO.SelectedIndex = 2 '選択後にonchangeのイベントを発生させる objIE.Document.all.JYO.fireEvent ("onchange") 'レースを選択する 'Raceの上から3番目(2)をテストで選択する.SelectedIndexに2をセット objIE.Document.all.Race.SelectedIndex = 2 objIE.Document.all.Race.fireEvent ("onchange") '変更時のイベントを発生させる End Sub |
いろいろと別な切り口の方法もあるみたいなので...
objIE.Document.Script.setTimeout "javascript:コード", 200
みたいな感じで、Document.Script.setTimeoutでコードが実行可能でした。
Document.Script.setTimeoutを一度試してみてください
下記、実際のテスト動画です。よろしくお願いします。
ソースコードと簡単な解説は [蛇足 脱線 横道 VBScript IE操作 で javaScriptを実行 Document.Script.setTimeoutをテスト] をみてください。
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。