- ベストアンサー
ラジオボタンをクリックする方法
- 質問者は、VBAを使用して郵便局の再配達の依頼を行おうとしていますが、ラジオボタンのチェック方法についてわかりません。
- 質問者が参照したソースコードには、<input type="radio" name="mailTypeCode" value="13">簡易・記録というラジオボタンがあります。
- 質問者が試したいくつかの方法はうまくいかなかったようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#直接のご回答は #1 さんがお書きですので、こちらをご覧になる他の方々のためにも、お節介かも知れない回答をお一つ。 >としてみましたが、どれもダメでした。 WEBページは、1つ1つ、すべて違う作りになっています。 したがって、IEを扱うコードを書くときには、そのページに相応しいコードを書かなければ、目的のデータを拾うことはできません。 ●objIE.document.forms(0).elements("mailTypeCode") = 13 「objIE.document.forms(0).elements("mailTypeCode")」をウォッチ式に追加して、このコードの時点でブレイクしてみると、 この配下に「Item」が19個あるのが判ります。 つまり、「お知らせ郵便物等の選択」にあるラジオボタンのすべてが「~.elements("mailTypeCode")」になっているようです。 >のソースを見ると、・・・ name="mailTypeCode"・・・となっているので よいところに目を付けていらっしゃるのですが、ソース全体を検索して、目的の「"mailTypeCode"」が何番目かを探ってみてください。 結果的には、3番目になりますので、前述の「Item」から申せば「Item 3」がそれに当たります。 【解説】 したがって、 objIE.document.forms(0).elements("mailTypeCode").Item3 = 13 としたいところですが、これでは「オブジェクトは、このプロパティまたはメソッドをサポートしません。」と叱られてしまいます。 こういう場合は、決まって「~("mailTypeCode")(3)」というように、「Item」のインデックスを指定してやることになっています。 ここで注意しなければならないのは、「Item 3」のインデックスが「3」ではないということです。 前述のように19個の「Item」がある訳ですが、イミディエイトウィンドウに ? objIE.document.forms(0).elements("mailTypeCode")(19) と入力して [Enter] すると、「オブジェクト変数または With ブロック変数が設定されていません。」と叱られてしまいます。 あるいは、ウォッチウィンドウに「objIE.document.forms(0).elements("mailTypeCode")(19)」を追加してみると、「値」が「Nothing」になっています。 逆にインデックスを「0」としてみると、ウォッチウィンドウの「値」は「"[object]"」に変わり、イミディエイトウィンドウの値も「[object]」になります。 まぁ、これは初歩的な説明ですが、要するに、普通は「配列のインデックス(添字)の最小値は0である」ということです。 前置きが長くなりましたが、 objIE.document.forms(0).elements("mailTypeCode")(2) = 13 でイケます。。。 と申したいところですが、これでは全然ダメです。 「13」というのは、当該の html で「簡易・記録のラジオボタン」に割り当てられた「値」で、同ページの [次へ進む] ボタンをクリックしたときに、「次ページ」に遷移するために「CGI」に渡される「値」です。 というように、Excel でIEを扱うときには、VBAの知識だけではなく、htmlコード の意味ぐらいは、少し勉強なさった方がよいかも知れませんが、「Perl」や「CGI」まで勉強する必要はありません。 【本題】 さて、本題にもどりますが、「ラジオボタンをクリック」するには、#1 さんがお書きの [Checked プロパティ] を「TRUE」に設定します。 ということで、 objIE.document.forms(0).elements("mailTypeCode")(2).Checked = True になります。 あるいは、[Click メソッド] を使って objIE.document.forms(0).elements("mailTypeCode")(2).Click でもイケます。 ●objIE.document.all("mailTypeCode").Value = 13 上記と同様に考えていくと objIE.document.all("mailTypeCode")(2).Checked = True objIE.document.all("mailTypeCode")(2).Click になります。 ただし、この場合のインデックス「2」は「objIE.document.all」の中で「"mailTypeCode"」という「name」または「id」が施されているものの「3つ目」の要素という意味になりますので、「objIE.document.forms(0)」の中での「3つ目」とは、厳密には意味が異なります。 ●objIE.document.all.forms(0)("mailTypeCode").Value = 13 こちらは、ウォッチウィンドウでご確認いただければお分かりになることですが、「objIE.document.all」配下には、「constructor」・「ie8_length」・「length」・「Item 1」・・・・ というプロパティしかありませんので、通用しません。 ウォッチウィンドウでは、「objIE.document.all.forms(0)("mailTypeCode").Value」の「値」は「<オブジェクトは、このプロパティまたはメソッドをサポートしていません。>」となっています。 【まとめ】 以上のように、WEBページのフォームエレメントを特定するには、 ・まず、当該のページの html ソースを読んで、使えそうなエレメントを探す。 ・ウォッチウィンドウにいろいろと入力してみて、特定できる要素を突き止める。 ということが基本になります。 今回の場合は、上記 objIE.document.forms(0).elements("mailTypeCode")(2) objIE.document.all("mailTypeCode")(2) の他にも、 objIE.document.forms(0)(8) objIE.document.forms(0)("mailTypeCode")(2) objIE.document.getElementsByTagName("input")(7) objIE.document.getElementsByName("mailTypeCode")(2) のそれぞれについて、 ~.Checked = True ~.Click で目的の操作を完了できます。 今回のように、html ソースの中で「name="~~"」で指定されている場合は objIE.document.all.mailTypeCode(2) objIE.document.forms(0).mailTypeCode(2) というような使い方もできますが、「"~~"」の中にスペースが入っている場合はこの限りではありません。 なお html ソースの中に「id="~~"」というな指定がある場合は、 objIE.document.getElementById("~~") も使えます。
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
.Checked = True でも通ります。 objIE.document.all("mailTypeCode")(2).Checked = True あるいは objIE.document.getElementsByName("mailTypeCode")(2).Checked = True インデックスが解らない場合はFor文で回して探ってみます。 For Each itm In objIE.document.all("mailTypeCode") If itm.value = 13 Then itm.Click Exit For End If Next
お礼
沢山の方法があるのですか、 役に立ちました。
- xls88
- ベストアンサー率56% (669/1189)
下記で試してください。 objIE.document.all("mailTypeCode")(2).Click あるいは objIE.document.getElementsByName("mailTypeCode")(2).Click
お礼
どちらでも動きました。 ソースがname="mailTypeCode"となっているから getElementsByNameでnameを取得して、 インデックスが0から始まるから3つめの2という事ですね。
お礼
objIE.document.forms(0).elements("mailTypeCode") をウォッチウインドウで見たら19個ありますね。 このItem3なのですか。 自分もいつもvbaさんに叱られます泣 ソースはvalue="13">になっていますが ココは無視した方が良いようですね。13にとらわれ過ぎました。 まとめの情報、以後使って行こうと思います。