
ie操作です。宜しくお願いいたします。
郵便局の再配達の依頼をvbaで行おうとしているのですが
ラジオボタンにチェックする方法がわかりません。
「簡易・記録」にチェックを入れたいです。
https://trackings.post.japanpost.jp/delivery/del …
のソースを見ると、
<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/del …
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
としてみましたが、どれもダメでした。
宜しくお願いいたします。
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("~~")
も使えます。
objIE.document.forms(0).elements("mailTypeCode")
をウォッチウインドウで見たら19個ありますね。
このItem3なのですか。
自分もいつもvbaさんに叱られます泣
ソースはvalue="13">になっていますが
ココは無視した方が良いようですね。13にとらわれ過ぎました。
まとめの情報、以後使って行こうと思います。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マウスオーバー時の文字サイズ
-
リストボックスの条件
-
選択した部分を新しいウィンド...
-
JavaScriptでPOSTで自ウィンド...
-
乗換案内 VBAで操作したい
-
head内から外部jsにするとスク...
-
cookieの操作について
-
setTimeoutで引数を渡したいの...
-
[JS] eventListener
-
特定ページから遷移した時にア...
-
マウスオンで説明文をページの...
-
連動するセレクトボックスの内...
-
VBの記述方法はVBAと同じなので...
-
HPで...。
-
vbaでnanacoにログイン(ie操作)
-
jQueryで右クリック禁止後に再...
-
一つ少ないmyFORM.length
-
ie=!!document.all
-
ブログ
-
getElementByIdでonClick内を書...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScript window.openで開く...
-
乗換案内 VBAで操作したい
-
onClickイベントの変更方法
-
TexでΣの添え字の位置直し
-
javascriptの基本的なことだと...
-
Latexに関する質問です。
-
サブウィンドウに背景色をつけ...
-
XMLでのAttributeを持ったNode...
-
excle VBA とweb上の検索を利用...
-
javascriptのdocument.allにつ...
-
スマホでフォームにフォーカス...
-
Null またはオブジェクトではあ...
-
ラジオボタンでreadonlyの切替え
-
文字がマウスカーソルを追従す...
-
LaTeX:数式を等号揃えにする方法
-
選択によってsubmitボタンの色...
-
UWSCでオンクリックのボタンを...
-
VBAのIE操作でframe構造のサイ...
-
DOM要素を削除しても、イベント...
-
webページ上のTabキーの動き
おすすめ情報