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

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

最新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#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>

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

最新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