セレクトボックスの選択について
未読分:19件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#19 2018年11月21日(水)10時46分 From: moomin3 | 返事 削除 変更 |
IEのサイトをVBAで操作するマクロを組んでいます。 担当者の入力欄に値を入れて選択肢から選択した値をセットしたいのですが、 直接Textでセットしても画面上は入っていますが、認識されません。 JQueryのイベントを見つけたので、イベントにある「input」を使って Set evt = htmlDoc.createEvent("HTMLEvents") evt.initEvent "input", True, False With htmlDoc.getElementById("assignee-field") .Value = csvAssingnee .dispatchEvent evt End With としたところ、JQueryのイベントが走りプルダウンがでてきて 意図する選択肢がフォーカスされましたが、その先に進めません。 これを選ぶにはどうしたらよいでしょうか? イベントには、onchange や selected はありませんでした。 よろしくお願いします。 |
Message#18 2016年12月16日(金)20時06分 From: まさし | 返事 削除 変更 |
ご連絡ありがとうございます。 > ソースの表記も変わらないって同じサイト? 同じサイトでございます。 http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP --------------------------- >objIE.document.getElementsByTagName("option")(i).Selected = "selected" >といった形で、セレクトボックににセット出来るようですが、 #14記載の上記で画面上は指定の通貨は画面上セット出来ています。 Changeイベントを起こすために、上記セット後、スリープを少し入れ、 #15記載のobjIE.navigate "JavaScript:assetsFilterChanged"を実行しました。 ■結果(IE11の要素の検査より) SCRIPT5009: 'assetsFilterChanged' は定義されていません。 未定義の識別子となっているようで、JavaScriptを正常に動かせていないと考えます。 ■疑問点 上記実行し、AUDJPYは画面上セット、Allも同様にselected=""処理している。 しかしながら要素の検査では以下のまま変わらず、こちらが影響している? <option value="All" selected="selected">All</option> <option value="AUDJPY">AUD/JPY</option> |
Message#17 2016年12月15日(木)07時41分 From: ジャッカル | 返事 削除 変更 |
ソースの表記も変わらないって同じサイト? assetsFilterChangedはそのサイトの関数だから処理したい関数名を指定しないと処理できないよ。 > お世話になっております。 > 先日より同問題取り組んでおり、 > ソース内にonChangeやChangeイベントがない為、 > 他のサイトで記載のあるJavaScriptでの処理では実行できず、 > 行き詰っております。 > > 検索でこちらがヒットしましたので質問させて頂きます。 > > > objIE.navigate "JavaScript:assetsFilterChanged" > 上記を実行しても正常に動作いたしません。(何も変わらない) > > ソース上の表記も2015年時から変わってないように見受けられます。 > 何か私の設定などが間違っているでしょうか? > > ご教示頂けますと幸いです。 > > > 名無しの次郎のメッセージ(#15)への返事 > > > JavaScriptの実行は以下より可能らしいです。 > > > > http://www.vba-ie.net/ie/javascript.html > > > > > > objIE.navigate "JavaScript:assetsFilterChanged" > > > > で実行できるやもしれません。 |
Message#16 2016年12月13日(火)23時45分 From: まさし | 返事 削除 変更 |
お世話になっております。 先日より同問題取り組んでおり、 ソース内にonChangeやChangeイベントがない為、 他のサイトで記載のあるJavaScriptでの処理では実行できず、 行き詰っております。 検索でこちらがヒットしましたので質問させて頂きます。 > objIE.navigate "JavaScript:assetsFilterChanged" 上記を実行しても正常に動作いたしません。(何も変わらない) ソース上の表記も2015年時から変わってないように見受けられます。 何か私の設定などが間違っているでしょうか? ご教示頂けますと幸いです。 名無しの次郎のメッセージ(#15)への返事 > JavaScriptの実行は以下より可能らしいです。 > > http://www.vba-ie.net/ie/javascript.html > > > objIE.navigate "JavaScript:assetsFilterChanged" > > で実行できるやもしれません。 |
Message#15 2015年4月8日(水)07時36分 From: 名無しの次郎 | 返事 削除 変更 |
JavaScriptの実行は以下より可能らしいです。 http://www.vba-ie.net/ie/javascript.html objIE.navigate "JavaScript:assetsFilterChanged" で実行できるやもしれません。 |
Message#14 2015年4月6日(月)23時39分 From: ぴぃスケ | 返事 削除 変更 |
任意の物をVBAにて objIE.document.getElementsByTagName("option")(i).Selected = "selected" といった形で、セレクトボックににセット出来るようですが、 これだとセレクトボックスのchangeイベントは発生しないのでしょうか?? 実際のサイト上ではchangeイベントを拾って任意のものにフィルタリングしている様に 感じます。 jquery?なのか、下記の記述が見つかりました。 assetsFilterChanged: function() { var a = this.$("#assets")[0]; app.AssetsModule.assetsController.assetsFilterChanged(a[a.selectedIndex].value) } 恐らくchangeイベントを発生させることが出来れば目的の処理は完成すると思われるのですが、changeイベントを発生させることは出来るのでしょうか? もしくはchangeイベントを拾っている処理を強制的に呼び出すとか・・・。 |
Message#13 2015年4月4日(土)08時37分 From: 名無しの次郎 | 返事 削除 変更 |
先刻申したようにリアルタイムで処理を見ると <select id="assets"> <option value="All" selected="selected">All</option> <option value="AUDJPY" selected="selected">AUD/JPY</option> <option value="AUDNZD">AUD/NZD</option> <option value="AUDUSD">AUD/USD</option> <option value="CADJPY" selected="selected">CAD/JPY</option> のように次々にselected="selected"に設定されています。 手動ではこれでいいのかもしれませんが、VBAで行う場合は、1つに絞る必要があるのやもしれません。 元々選択されていたAUDJPYのselectedを削除して1つに絞ることで正常に作動する可能性があります。 削除の方法は分かりかねますが小生の知識ではselected=""で設定すれば削除と同等になるのではないかと考えております。 |
Message#12 2015年4月3日(金)20時41分 From: ぴぃスケ | 返事 削除 変更 |
Sleep等を入れることにより、とりあえずセレクトボックスで選択されている様に見かけ上はなりました・・・。 が、しかし、手動で操作するとセレクトボックスで通貨を選択後、選択された通貨だけに フィルタされるのですが、VBAで選択したばあいは、フィルタされないみたいです。 どうしてでしょうか? |
Message#11 2015年3月31日(火)16時00分 From: ぴぃスケ | 返事 削除 変更 |
If objIE.document.getElementsByTagName("option")(i).value= "EURJPY" Then で試してみました。 エラーは出ないのですが。。。 選択されないみたいです。 JavaScriptの影響なのでしょうか? |
Message#10 2015年3月31日(火)12時24分 From: VBAマスター | 返事 削除 変更 |
ご指摘どおりです(笑) If objIE.document.getElementsByTagName("option")(i).value= "EURJPY" Then ですね。 glowのメッセージ(#4)への返事 > 多分、If objIE.document.getElementsByTagName("option")(i).vaue = "EURJPY" Then > の「vaue」が間違っているような気がしますよ。 > 「value」じゃないですかね? > > 回答者さん、横から口挟んですいません |
Message#9 2015年3月31日(火)02時37分 From: 名無しの次郎 | 返事 削除 変更 |
申し訳ないですが、小生の力ではここまでです。 サイト確認するとおそらくjavaScriptで切り替えを行っているように思えます。 手動で選択すると選択したものが以下のようにリアルタイムで「selected="selected"」で切り替わっているのが確認できました。 他の回答者様がおっしゃるように「selected="selected"」を追記することがカギだと思われます。 <select id="assets"> <option value="All" selected="selected">All</option> <option value="AUDJPY" selected="selected">AUD/JPY</option> <option value="AUDNZD">AUD/NZD</option> <option value="AUDUSD">AUD/USD</option> <option value="CADJPY" selected="selected">CAD/JPY</option> <option value="CHFJPY">CHF/JPY</option> <option value="EURAUD">EUR/AUD</option> <option value="EURGBP">EUR/GBP</option> <option value="EURJPY" selected="selected">EUR/JPY</option> <option value="EURUSD">EUR/USD</option> <option value="GBPAUD" selected="selected">GBP/AUD</option> <option value="GBPJPY">GBP/JPY</option> <option value="GBPUSD">GBP/USD</option> <option value="NZDJPY">NZD/JPY</option> <option value="NZDUSD" selected="selected">NZD/USD</option> <option value="USDCAD">USD/CAD</option> <option value="USDCHF">USD/CHF</option> <option value="USDJPY">USD/JPY</option> <option value="XAUUSD">GOLD</option> <option value="AUS200">AUS200</option> <option value="HKG33">HKG33</option> <option value="JPN225">JPN225</option> <option value="UK100">UK100</option> <option value="US30">US30</option> </select> |
Message#8 2015年3月30日(月)23時03分 From: ぴぃスケ | 返事 削除 変更 |
VBAの方で調整するのですね。 お手間になってしまいますが、アドバイス頂けたら幸いです。 操作としては、下記の様な流れて操作していきます。 下記サイトを開く http://jp.demo.highlow.net/Account/QuickDemoLogin?language=ja-JP 「スプレッドON DEMAND」を選択 「1分」を選択 その右のセレクトボックスより任意のものを選択。 例えばEUR/JPY といった流れの事をしたいのですが・・・。 で、上記セレクトボックス部分のHTMLを抽出すると下記の様になっています。 (FireFoxのインスペクタで抽出) selectのnameの部分が"assets"なのかな?と思いますが、 だとすると、 objIE.document.all("assets")(2).Selected = True こんな記述になると思います。 この場合、「オブジェクトが必要です。」というエラーになってしまいます。 Formで作成された感じでもないようなので、このやり方が正しいかは不明ですが。。。 手動で行った場合、このセレクトボックスを選択すると、選択した通貨ペアのみが フィルタされて下部に通貨ペアが表示されるのですが、そこまで出来たらひとまず成功です。 これがVBAでどう表現したらいいのかをアドバイス頂けたら嬉しいです。 <section id="assetsRegion"> <div style="display: block;"> <div id="assetsAssetsFilterZoneRegion"> <div> <div id="assetFilterContainer" class="customSelect" style="overflow: hidden; position: relative; display: inline-block; width: 165px;"> <select id="assets"> <option value="All" selected="selected"> All </option> <option value="AUDJPY" selected="selected"> AUD/JPY </option> <option value="EURJPY" selected="selected"> EUR/JPY </option> <option value="GBPJPY"> GBP/JPY </option> <option value="NZDJPY"> NZD/JPY </option> </select> <svg class="arrow" style="position: absolute; right: 0; top: 0; pointer-events: none; height: 26px;"></svg> </div> </div> </div> </div> </section> 名無しの次郎のメッセージ(#7)への返事 > HTMLの知識はありますでしょうか? > Formの仕組みが理解できていないとこの当たりの説明をしても難しいやもです。 > 小生はサイト作成の知識はあるのですが、サイトの情報を収拾したくこちらのサイトを参考に勉強させていただいております。 > > ですので、詳細について記述できるほどの技術は持ち合わせておりませんが、 > 以下のページを見ると「objIE.document.all("pref")(2).Selected = True」で選択となっております。こちらを設定した上で、ブラウザの開発ツールを確認すると「selected="selected"」となっていたので、処理をすることでHTMLソースを書き換えられると考えております。 > ですので、name属性も新たに設定するとHTMLソースに追記した状態であれば、selectとoptionが連動できるようになるのではないか?と考えた次第でございます。 > > http://www.vba-ie.net/form/select.html > > > > > > ぴぃスケのメッセージ(#6)への返事 > > > selectにname属性を記述させてから > > > > というのは、HTMLを修正するという意味なのでしょうか? > > > > それともHTMLはそのままで、VBAのソースをそのように工夫する事で出来るのでしょうか? > > 具体的な記述方法が解らないのでアドバイスいただけると助かります。 > > > > > > 名無しの次郎のメッセージ(#5)への返事 > > > > > 小生の考え方はselectはあくまでoptionとセットであり、その識別にはname属性が必要不可欠であると考えます。 > > > > > > ですので、selectにname属性を記述させてから、optionの指定した値を指定させてはいかがですか? |
Message#7 2015年3月30日(月)20時46分 From: 名無しの次郎 | 返事 削除 変更 |
HTMLの知識はありますでしょうか? Formの仕組みが理解できていないとこの当たりの説明をしても難しいやもです。 小生はサイト作成の知識はあるのですが、サイトの情報を収拾したくこちらのサイトを参考に勉強させていただいております。 ですので、詳細について記述できるほどの技術は持ち合わせておりませんが、 以下のページを見ると「objIE.document.all("pref")(2).Selected = True」で選択となっております。こちらを設定した上で、ブラウザの開発ツールを確認すると「selected="selected"」となっていたので、処理をすることでHTMLソースを書き換えられると考えております。 ですので、name属性も新たに設定するとHTMLソースに追記した状態であれば、selectとoptionが連動できるようになるのではないか?と考えた次第でございます。 http://www.vba-ie.net/form/select.html ぴぃスケのメッセージ(#6)への返事 > selectにname属性を記述させてから > > というのは、HTMLを修正するという意味なのでしょうか? > > それともHTMLはそのままで、VBAのソースをそのように工夫する事で出来るのでしょうか? > 具体的な記述方法が解らないのでアドバイスいただけると助かります。 > > > 名無しの次郎のメッセージ(#5)への返事 > > > 小生の考え方はselectはあくまでoptionとセットであり、その識別にはname属性が必要不可欠であると考えます。 > > > > ですので、selectにname属性を記述させてから、optionの指定した値を指定させてはいかがですか? |
Message#6 2015年3月30日(月)19時07分 From: ぴぃスケ | 返事 削除 変更 |
selectにname属性を記述させてから というのは、HTMLを修正するという意味なのでしょうか? それともHTMLはそのままで、VBAのソースをそのように工夫する事で出来るのでしょうか? 具体的な記述方法が解らないのでアドバイスいただけると助かります。 名無しの次郎のメッセージ(#5)への返事 > 小生の考え方はselectはあくまでoptionとセットであり、その識別にはname属性が必要不可欠であると考えます。 > > ですので、selectにname属性を記述させてから、optionの指定した値を指定させてはいかがですか? |
Message#5 2015年3月30日(月)19時02分 From: 名無しの次郎 | 返事 削除 変更 |
小生の考え方はselectはあくまでoptionとセットであり、その識別にはname属性が必要不可欠であると考えます。 ですので、selectにname属性を記述させてから、optionの指定した値を指定させてはいかがですか? |
Message#4 2015年3月30日(月)16時43分 From: glow | 返事 削除 変更 |
多分、If objIE.document.getElementsByTagName("option")(i).vaue = "EURJPY" Then の「vaue」が間違っているような気がしますよ。 「value」じゃないですかね? 回答者さん、横から口挟んですいません |
Message#3 2015年3月30日(月)11時53分 From: ぴぃスケ | 返事 削除 変更 |
ご回答ありがとうございます。 If objIE.document.getElementsByTagName("option")(i).vaue = "EURJPY" Then この箇所で、「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 となってしまいます。 select id="assets" というIDの中のOPTIONを処理する。 というような事は可能なのでしょうか? 引き続き、アドバイスお待ちしております。 VBAマスターのメッセージ(#2)への返事 > ぴぃスケのメッセージ(#1)への返事 > > 下記のHTMLの箇所を想定しています。 > > 想定とありますがこちら実際のHTMLソースですが? > > selectタグはidではなくcgiやphpなどで処理する場合、普通nameが必要となります。 > こちらもjavascriptで処理している可能性が高いです。 > DOM的にid選択では、optionタグと連動していないのかもしれません。 > > 確認環境がないのでなんともいえませんが、optionタグにselectedを設定する方法ならいけるかもしれません。 > > Sub test() > > Dim objIE As InternetExplorer > > > 'option要素を全て抽出 > For i = 0 To objIE.document.getElementsByTagName("option").length - 1 > > If objIE.document.getElementsByTagName("option")(i).vaue = "EURJPY" Then > > objIE.document.getElementsByTagName("option")(i).selected="selected" > > Exit For > > End If > > Next i > > > 【selectの参考情報】※クイックリファレンスサイトより引用 > <SELECT>はセレクトボックスを作成するタグです。 初期値ではプルダウン式のメニューとなりますが、size属性で選択肢の表示行数を指定することができます。 セレクトボックス内の選択肢は<OPTION>タグで指定します。 > > フォームの部品としてデータが送信される際には、 <SELECT>タグのname属性で付けたデータ名と、 選択された<OPTION>のvalue属性の値を一組にして、 <FORM>タグのaction属性で指定したサーバー上のファイルに、 <FORM>タグのmethod属性で指定した転送方法で送られます。 > > <SELECT>はフォームの部品としてではなく、ユーザーインターフェースとしても使用することができます。 ただし、Netscape Navigator4以前では、 <FORM>〜</FORM>内に記述しないと無視されるので注意が必要です。 |
Message#2 2015年3月28日(土)10時23分 From: VBAマスター | 返事 削除 変更 |
ぴぃスケのメッセージ(#1)への返事 > 下記のHTMLの箇所を想定しています。 想定とありますがこちら実際のHTMLソースですが? selectタグはidではなくcgiやphpなどで処理する場合、普通nameが必要となります。 こちらもjavascriptで処理している可能性が高いです。 DOM的にid選択では、optionタグと連動していないのかもしれません。 確認環境がないのでなんともいえませんが、optionタグにselectedを設定する方法ならいけるかもしれません。 Sub test() Dim objIE As InternetExplorer 'option要素を全て抽出 For i = 0 To objIE.document.getElementsByTagName("option").length - 1 If objIE.document.getElementsByTagName("option")(i).vaue = "EURJPY" Then objIE.document.getElementsByTagName("option")(i).selected="selected" Exit For End If Next i 【selectの参考情報】※クイックリファレンスサイトより引用 <SELECT>はセレクトボックスを作成するタグです。 初期値ではプルダウン式のメニューとなりますが、size属性で選択肢の表示行数を指定することができます。 セレクトボックス内の選択肢は<OPTION>タグで指定します。 フォームの部品としてデータが送信される際には、 <SELECT>タグのname属性で付けたデータ名と、 選択された<OPTION>のvalue属性の値を一組にして、 <FORM>タグのaction属性で指定したサーバー上のファイルに、 <FORM>タグのmethod属性で指定した転送方法で送られます。 <SELECT>はフォームの部品としてではなく、ユーザーインターフェースとしても使用することができます。 ただし、Netscape Navigator4以前では、 <FORM>〜</FORM>内に記述しないと無視されるので注意が必要です。 |
Message#1 2015年3月28日(土)01時40分 From: ぴぃスケ | 返事 削除 変更 |
タイトル通り、セレクトボックスの選択を行いたいのですが・・・ 下記のHTMLの任意の値を選択させたいのですが、とりあえずEURJPYと仮定して 以下の処理を記述したのですが、選択されないで次の処理に移ってしまいます。 objIE.document.getElementById("assets").Value = "EURJPY" もしくは objIE.document.getElementById("assets").selectedIndex = "3" 下記のHTMLの箇所を想定しています。 <select id="assets"> <option value="All" selected="selected"></option> <option value="AUDJPY"></option> <option value="AUDUSD"></option> <option value="EURJPY" selected="selected"> EUR/JPY </option> <option value="EURUSD"></option> <option value="GBPJPY"></option> <option value="NZDJPY"></option> <option value="NZDUSD"></option> <option value="USDJPY"></option> </select> アドバイスお待ちしています。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降