[三流君]
[VBAで楽しく]
[VBA IE 操作]
−−> No.154 IE SELECTタグの選択 .SelectedIndex=nで選択
IE SELECTタグの選択 .SelectedIndex=nで選択
メルマガ発行内容
<IE SELECTタグの選択 .SelectedIndex=nで選択>
どうも、三流プログラマーのKen3です。
今回は、
SELECT タグを探ってみます。
今回の、サンプルファイルは、
http://www.ken3.org/vba/lzh/vba154.lzh
にvba154.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から、起こしてやることは
できないでしょうか。
----
/*
* 2.またまた、脱線昔話、いつになったら本題が完成するの?
*/
http://www.ken3.org/vba/test110.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>
に対して、SELECT OPTIONを選択する時、
私は、下記のような感じで選択してました。
No.110 IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True
/vba/backno/vba110.html
で、やった方法は、
いま、どのSELECTタグを通過したかを覚えて、
下記のように処理しました。
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
Dim strSTAG As String '最近のSELECTタグの名前を保存
'全ての項目を調べる
For i = 0 To objIE.Document.all.Length - 1
'インプットのタグか?.tagnameを見る
Debug.Print i & ":" & objIE.Document.all(i).tagname
If objIE.Document.all(i).tagname = "SELECT" Then
strSTAG = objIE.Document.all(i).Name 'SELECT名前を代入
End If
If objIE.Document.all(i).tagname = "OPTION" Then
'さらに、値が2と保存したSELECTがKenかチェックする
If objIE.Document.all(i).Value = "2" And strSTAG = "ken" Then
'ここまで調べて、チェックを付ける
objIE.Document.all(i).Selected = True
End If
'さらに、値が1と保存したSELECTがkansouかチェックする
If objIE.Document.all(i).Value = "1" And strSTAG = "kansou" Then
'ここまで調べて、チェックを付ける
objIE.Document.all(i).Selected = True
End If
End If
Next i
End Sub |
ポイントは、
~~~~~~~~~~~~
.tagname = "SELECT"の時、
strSTAG = objIE.Document.all(i).Name 'SELECT名前を代入
と、名前を保存します。
OPTIONよりも先にSELECTタグが現れるHTMLの仕様を利用してます。
※OPTIONだけはありえないので。
で、あとは、保存されたstrSTAGと値を比べて、
必要なデータを選択してます。
/*
* 3..SelectedIndexを使ってみた
*/
と、やって済ませてたけど、
今回の読者の質問見ると、あれ?これなんだ?って反応したのが、
>WB1.Document.form1.jyo.selectedIndex = 1
>WB1.Document.form1.jyo.Options(1).selected = "selected"
>WB1.Document.form1.jyo.Options(1).selected = True
の、
.selectedIndex = 1
^^^^^^^^^^^^^^^^^^
これって、SELECTタグの選択位置じゃないの?
私は、OPTIONタグを一生懸命探して、
objIE.Document.all(i).Selected = True
なんてやってたけど、
.SelectedIndexなんてのが使えるなら、
~~~~~~~~~~~~~~
上から0番目、上から3番目とか指定した選択が出来そうですね。
上からn番目なので、valueの値とは、連動しないことに注意してくださいね。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<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>
テストで、
Ken3が好きなヨハコマベイスターズ
と
某掲示板で言われた最新情報ほしかったら英語のドキュメント読め
を選択するために、
SELECTタグの.SelectedIndexに値をセットしてみます。
objIE.Document.all.Ken.SelectedIndex = 5
objIE.Document.all.kansou.SelectedIndex = 2
と、上から(0から数えたインデックス)でデータを選択してます。
下記が、ソースファイルです。
option valueと連動していない(残念)なことも含めて確認してみてください。
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
'SELECTタグに付いた名前(Name)がKen上から6番目(5)をテストでセット
'.SelectedIndexに5をセット(012345で6番目となる)
objIE.Document.all.Ken.SelectedIndex = 5
'kansouの上から3番目(2)をテストで選択する.SelectedIndexに2をセット
objIE.Document.all.kansou.SelectedIndex = 2
'0からインデックスが始まるのがポイントです↑
End Sub |
こんな方法もあるんですね・・・・逆に勉強になってしまった。
______________________________
---- 余談 試験問題のお話 ----
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
なんか、読者の質問に、別の回答が隠されて居たりしたので、
中学生の頃、英語の試験で、英単語が解らなかった時に、
別の和訳の問題に解答が書いてあった、
そんなかなり前のことをなぜか思い出してしまった。
現在の質問に過去問題の回答が隠されている。なんか面白いよね。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
現在の恋人とのケンカで、昔の恋人との簡単なもう一つの和解方法に気が付いたり?
※↑チョット違うかな。
えっ、過去には戻れないので、今後にその経験を活かせば良いって?
みなさん前向きなんですねメモメモ。過去はあまり引きずらないほうがいいよね!!
おっと、昔の問題解決方法は置いといて、現在の問題を処理しないとね。
-【けんぞう!】---------------------------------------------------------
ASPが利用可能なレンタルサーバーをお探しのアナタ、
http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介
『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳)
------------------------------------------------------------------------
/*
* 4.終わりの挨拶
*/
今回は、
またまた、読者質問の本線をほっといて、
勝手に脱線して、
.SelectedIndexを使ってみた話でした。
^^^^^^^^^^^^^^
だから、ハヤク、.SelectedIndexでJavaScriptが起動しない問題をヤレよ!!
何か読者の心に残れば、うれしいです。
*私の独り言をうまく消化してくださいね。
いつも失敗?の負け組のKen3でした。
~~~~~~~(↑オイオイ)
In message "[VBAで楽しく No.141] - 箇条書きで必要部品を洗い出し単体テストする",
>日光が斜めから射すので、まっすぐに伸びない?
>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>植物の成長って、日光に向かって伸びるんですよね。
>太陽の光がナナメからだったら、ナナメに伸びる・・・
>(上司や先輩の育て方や光具合が、新人の成長に影響を与えるのも事実です・・・)
---
って、話じゃないですが、私の変なサンプル見て、ナナメに育たないように、、、、
※最初に教えたループで回してより、
今回の.SelectedIndexにセット方法がよかったみたいに、
教わったことだけじゃなく、さらに調べてくださいね。
フィードバック
VBA系の→[掲示板]←を覗く、質問を書き込む
評価・感想
ページフッター(リンクや広告など)
[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列
書籍の購入
Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??
コンピュータ書籍の発送がハヤイ専門店
コンピュータの本・専門店
|
※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり
|
amazon.co.jpでキーワード別チェック
下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・