ラジオボタンをクリックする方法

このQ&Aのポイント
  • 質問者は、VBAを使用して郵便局の再配達の依頼を行おうとしていますが、ラジオボタンのチェック方法についてわかりません。
  • 質問者が参照したソースコードには、<input type="radio" name="mailTypeCode" value="13">簡易・記録というラジオボタンがあります。
  • 質問者が試したいくつかの方法はうまくいかなかったようです。
回答を見る
  • ベストアンサー

ラジオボタンをクリックしたい

ie操作です。宜しくお願いいたします。 郵便局の再配達の依頼をvbaで行おうとしているのですが ラジオボタンにチェックする方法がわかりません。 「簡易・記録」にチェックを入れたいです。 https://trackings.post.japanpost.jp/delivery/delivery_request.do のソースを見ると、 <DIV><FONT class="explain_font_normal"> <input type="radio" name="mailTypeCode" value="13">簡易・記録 </FONT></DIV> となっているので Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "https://trackings.post.japanpost.jp/delivery/delivery_request.do" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.document.ReadyState <> "complete" DoEvents Loop objIE.document.forms(0).elements("mailTypeCode") = 13 objIE.document.all("mailTypeCode").Value = 13 objIE.document.all.forms(0)("mailTypeCode").Value = 13 Set objIE = Nothing End Sub としてみましたが、どれもダメでした。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.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("~~") も使えます。

sdfkhewrqa
質問者

お礼

objIE.document.forms(0).elements("mailTypeCode") をウォッチウインドウで見たら19個ありますね。 このItem3なのですか。 自分もいつもvbaさんに叱られます泣 ソースはvalue="13">になっていますが ココは無視した方が良いようですね。13にとらわれ過ぎました。 まとめの情報、以後使って行こうと思います。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

.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

sdfkhewrqa
質問者

お礼

沢山の方法があるのですか、 役に立ちました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

下記で試してください。 objIE.document.all("mailTypeCode")(2).Click あるいは objIE.document.getElementsByName("mailTypeCode")(2).Click

sdfkhewrqa
質問者

お礼

どちらでも動きました。 ソースがname="mailTypeCode"となっているから getElementsByNameでnameを取得して、 インデックスが0から始まるから3つめの2という事ですね。

関連するQ&A

  • オブジェクト変数または With ブロック変数が設定されていません。

    下記の様に組みましたが、下記の★印の所で止まる様な事があります。 毎回止まるわけではないのですが、止まる時に「オブジェクト変数または With ブロック変数が設定されていません。」と表示されますが、 原因は何か?どの様にすればいいのか?など詳しく教えてください。 よろしくお願いします。 Sub test() Dim objIE As Object Dim strCOMMENT As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'データをセットする 'htmlドキュメント フォーム(0番目) アイテムに転記(代入)する objIE.Document.forms(0).Item("username").Value = "11111" objIE.Document.forms(0).Item("password").Value = "11111" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.subm.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'タイトル・コメントの読み込み strtitle = Sheets("sheet1").Range("k7") strCOMMENT = Sheets("sheet1").Range("k9") Application.WindowState = xlMinimized While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.forms(0).Item("title").Value = strtitle objIE.Document.forms(0).Item("comment").Value = strCOMMENT While objIE.readystate <> 4 While objIE.busy = True DoEvents ' Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.submit.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'フォーム(0番目)を .Submit(確認) する objIE.Document.forms(0).getElementsByTagName("input")(11).Click '←★この部分で止まる時があります。 While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 7, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Quit '.Quitで閉じる End Sub

  • 「地図」で検索するにはどういう操作をすればいいので

    ヤフーのトップページから 値を入れて検索を押すまではできるのですが 「ウェブ」ではなく「地図」で検索するにはどういう操作をすればいいのでしょうか? Sub yahoo() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop objIE.Document.forms(0).elements("p").Value = "東京" '‘「地図」をクリックする操作をしたい objIE.Document.forms(0).submit Set objIE = Nothing End Sub 宜しくお願いいたします。

  • vba ie操作 ボタンを押したい(2)

    https://ca.omc-card.co.jp/member/omcplus_login.html のサイトにログインしたいのですが、ログインボタンが押せません。 ソースは、 ********************************************************************************** <FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value="">     ~~~省略~~~ <TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15"> <TR> <TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD> </TR> </TABLE> </FORM> ********************************************************************************** です。 --------------------------------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.forms(0).Item("sid_input").Value = "×××" objIE.Document.forms(0).Item("pw_input").Value = "×××" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop 'objIE.Document.forms(1).submit 'エラーになる objIE.Document.all.Item("document.form1").Click 'エラーになる objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------------------------------- テキストにIDとPWを入れるところまでは出来たのですが、 ログインボタンを押すことができません。 すいませんがご教授ご回答よろしくお願いしますm( )m

  • VBAでサイトのsubmitボタンをクリックしたい

    とあるサイトに自動ログインするvbaを作っています。 (三流君を参考にしています) Sub ログイン() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '************************************************** ObjIE.navigate "https://www" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop Application.Wait (Now + TimeValue("00:00:03")) ObjIE.Document.all.UserId.Value = "ID" ObjIE.Document.all.submit_l貸出照会.Click ’ここでエラーになる End Sub 上記のようなコードを書いているのですが 該当サイトのソースを読み取り、 「INPUT TYPE="text" NAME="userid" VALUE=""」 の部分は ObjIE.Document.all.UserId.Value = "ID" で出来たのですが 「<INPUT TYPE="submit" VALUE="貸出照会">」 の部分をクリックしてログインしたいのですが ObjIE.Document.all.貸出照会.Click だとエラーになってしまいます。 ObjIE.Document.Forms(0).item("貸出照会").Click もダメでした。 ご教授よろしくお願い致します。 (エクセル2003)

  • vbaでyahooメールの受信メールの一覧を読み取

    vbaでyahooメールの受信メールの一覧を読み取る方法はありますか? Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://login.yahoo.co.jp/config/login?logout=1" 'ログアウトする Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "https://login.yahoo.co.jp/config/login?.src=&.pd=&.done=http%3A//www.yahoo.co.jp/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all.UserName.Value = "" objIE.Document.all.passwd.Value = "" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.Forms(0).submit Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "http://jp.mc1003.mail.yahoo.co.jp/mc/welcome?.rand=6i0loli2li7s6&noFlush&YY=940152127#_pg=showFolder&fid=Inbox&order=down&tt=84&pSize=25&.jsrand=6381767" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.Body.innerHTML Set objIE = Nothing End Sub これでログインまではできるのですが、その後のソースを読み取っても受信メールの一覧は読み取れません。 ログイン後に、vbaではなく手動でWEBクエリをやってソースに書き出してみましたがやはり受信メールだけは読み取れません。 WEBクエリならフォルダの一覧は読み取れました。 VBAで読み取るのは不可能なのでしょうか?

  • 住所を入力し、検索ボタンをクリックしたいのですが

    グーグルマップを開き 住所を入力し、検索ボタンをクリックしたいのですが それをvbaで実現可能でしょうか? Dim objIE As Object Sub Sample() Dim myObj As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://www.google.co.jp/maps" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop Set objIE = Nothing End Sub はできたのですが 「グーグルマップを検索する」が ソース内で見当たらないし さらに 検索ボタンもソース内で探せません。 グーグルの検索窓に「東京都千代田区丸の内1-9-1」 トイレたいのですが VBAでどうすればいいのでしょうか?

  • ie操作 ログインボタンを押せないです

    こんばんは。いつもお世話になっております。 ie操作でうまく行かないので教えてください。 イトーヨーカドーのサイトにログインしたいのですがログインボタンが押下できません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.iy-net.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("userId").Value = ID objIE.Document.all("password").Value = PW objIE.Document.forms(0).submit Set objIE = Nothing End Sub --------------------------------------------------------- だと、 「ハイフンを除く7ケタを半角数字でご入力ください」になってしまいます。 ログインボタンが押せてないのかもしれないけど、よくわかりません。 --------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.iy-net.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("userId").Value = ID objIE.Document.all("password").Value = PW For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).innerText = "ログイン" Then objIE.Document.Links(i).Click Exit For End If Next i Set objIE = Nothing End Sub --------------------------------------------------------- にすると、 https://www.iy-net.jp/nspc/logininput.do のURLが表示されて会員認証の画面になってしまいます。 だからって objIE.Navigate "https://www.iy-net.jp/" を https://www.iy-net.jp/nspc/logininput.do にして objIE.Document.forms(0).submit すると https://www.iy-net.jp/nspc/searchresult.do のページが表示されて 「再度 TOPページよりログインいただけますようお願い申し上げます。」 になってしまいます。 ログインする方法を教えていただけますか? ご教授よろしくお願いします。

  • VBAでWEBのリンクをクリックしたい

    取引先のWebサイトから請求書のデータを取得しようと思い、該当ページに到達すべくコードを書いてみました。 以下のコードを F8 キーでステップ実行を続けると目的を達するのですが、ボタンに割付て実行するとログイン後のページを表示した後目的のリンクをクリックできません。 状態待ちかと思い待機コードをビシバシ突っ込みましたが通常実行では目的のリンクをクリックしてくれません。 どうしたらよいでしょうか? Sub サイトオープン() Set objIE = CreateObject("InternetExplorer.Application") With objIE .Navigate "https://www2.hogehoge/Login.jsp" .Visible = True 'IE待機 Do While .Busy = True DoEvents Loop 'テストボックスへ入力 .Document.all.Item("userId").Value = Range("b1").Value .Document.all.Item("password").Value = Range("b2").Value '送信ボタンクリック .Document.forms(0).submit     '←ここまではOK    'IE待機 Application.Wait 3000 '1000分の1秒 Do While .Busy = True DoEvents Loop     ’フレーム内のリンク確認 For Each objLink In objIE.Document.frames("right").Document.Links If objLink.Href = "https://www2.hogehoge/BillList.jsp?init=false&search=???&page=Top" Then '←F8ステップ実行ではOKだが、通常処理では判定されない?      'IE待機 Do While .Busy = True DoEvents Loop  ’リンクをクリック          objLink.Click  ’←要はこれをしたい!        'IE待機      Application.Wait 3000 '1000分の1秒 Do While .Busy = True DoEvents Loop Exit For End If Next End With Set objIE = Nothing End Sub

  • DoEvents

    VBSでDoEventsは使えないのでしょうか? *************************** Dim ObjIE dim i Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://oshiete.goo.ne.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Set ObjIE = Nothing *************************** だと、エラーになりました。 Wscript.sleep 3000 ならエラーにならずにコードは動きました。 VBAならDoEventsは使えるのに VBSで使えない理由を教えてください。

  • 次回からのログインを省略にチェックを入れたくない

    vbaで教えてgoo(Goo知恵袋)にログインを試みています。 ログインする事はできたのですが 出来れば「次回からのログインを省略」にチェックを入れたくなのです。 Goo知恵袋はデフォルトでチェックが入っています。 自分で作ったコードは、 --------------------------------------------------------- Sub test() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://otasuke.goo-net.com/mypage#tabs" '表示終了まで共通_表示待ち Do While objIE.Busy = True DoEvents Loop objIE.document.all.mailaddress.Value = "" objIE.document.all.Password.Value = "" '表示終了まで共通_表示待ち Do While objIE.Busy = True DoEvents Loop objIE.document.all("login_skip")(1).Checked = False objIE.document.Forms(1).submit Set objIE = Nothing End Sub --------------------------------------------------------- です。 objIE.document.all("login_skip")(1).Checked = False でエラーになってしまいます。 ご教授よろしくお願いします。

専門家に質問してみよう