セレクトボックスの選択について

最近の書き込み件数: 今日 0件、昨日 0件
未読分:15件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

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>

アドバイスお待ちしています。

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

スポンサー リンク

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

スポンサー リンク

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com