質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

7736閲覧

VBAでのIE操作 getElementsByClassNameでのエラー(オブジェクト変数または With ブロック変数が設定されていません。)

tanaka_ganbare

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/09/01 16:40

編集2019/09/03 15:37

VBAでIEを操作し、nexco西日本のサイト(https://search.w-nexco.co.jp/route.php)から
高速料金を取得するexcelファイルを作成しようとしています。

class属性のテキストをgetElementsByClassName(0).innertextで取得しようと試みているのですがうまくいきません。
以下のコードを実行すると「オブジェクト変数またはWithブロック変数が設定されていません。」という、
エラーが表示されてしまいます。ただ、デバックから継続すると、必要な情報を表示することができますが。
初めにエラーが表示される原因がわかりません。原因がわかる方がいればご指摘をお願いします。

↓浜松西や豊田JCTなどの情報を取得したい。
イメージ説明

VBA

1Dim IE As Object, Obj As Object 2'IE起動 3Set IE = CreateObject("InternetExplorer.Application") 4 5'IEの操作設定 6IE.Visible = True 7 8'サイトを開く 9IE.Navigate "https://search.w-nexco.co.jp/route.php" 10 11'IE読込待ち 12Do While IE.Busy Or IE.ReadyState < 4 13 DoEvents 14Loop 15 16'出発地 17IE.document.getElementsByClassName("iptTxt grid175 clearfix")(0).Value = "浜松西" 18IE.document.getElementsByClassName("iptTxt grid175 arrive clearfix")(0).Value = "名古屋西" 19 20'検索 21For Each Button In IE.document.getElementsByClassName("submit-btn") 22 If Button.Value = "検索する" Then 23 Button.Click 24 Exit For 25 End If 26Next 27 28Do While IE.Busy Or IE.ReadyState < 4 29 DoEvents 30Loop 31 32MsgBox IE.document.getElementsByClassName("point")(0).innerText 33 34End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

豊田JCT等の情報は、JSで出力しているようです。
ただし、IE読込完了(IE.Busy Or IE.ReadyState < 4)の条件が成立した直後であっても、JSの処理が終わっていないのでしょう。
もう少し待つとIE.document.getElementsByClassName("point")のタグが識別できるようになります。

投稿2019/09/06 06:42

kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA

1Dim IE As Object, Obj As Object 2'IE起動 3Set IE = CreateObject("InternetExplorer.Application") 4 5'IEの操作設定 6IE.Visible = True 7 8'サイトを開く 9IE.navigate "https://search.w-nexco.co.jp/route.php" 10 11'IE読込待ち 12Do While IE.Busy Or IE.readyState < 4 13 DoEvents 14Loop 15 16'出発地 17IE.document.getElementsByClassName("iptTxt grid175 clearfix")(0).Value = "浜松西" 18IE.document.getElementsByClassName("iptTxt grid175 arrive clearfix")(0).Value = "名古屋西" 19 20'検索 21For Each Button In IE.document.getElementsByClassName("submit-btn") 22 If Button.Value = "検索する" Then 23 Button.Click 24 Exit For 25 End If 26Next 27 28Do While IE.Busy Or IE.readyState < 4 29 DoEvents 30 Application.Wait Now + TimeValue("0:00:05") 31Loop 32 33MsgBox IE.document.getElementsByClassName("point")(0).innerText

'IE読込待ち
Do While IE.Busy Or IE.readyState < 4
DoEvents
Loop
を 抜けても
描画が終了していないからでは
Javascript(?)

投稿2019/09/05 09:05

編集2019/09/05 14:24
Reach

総合スコア733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

確か、document→Documentにするとうまくいくはずです。
ちょっとWSHとDOMで変わるんじゃなかったかな

投稿2019/09/01 23:03

impepc

総合スコア86

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanaka_ganbare

2019/09/03 11:45

自動的に小文字に変換されてしまいます。 大文字にする方法あるんですか?
impepc

2019/09/03 14:39

そうなんですね。 VBSのつもりで言っていました。すみません。 これを見るとvalueが小文字ですねぇ。 https://www.vba-ie.net/sp/form/text.php 一度、 Set a = IE.document.getElementsByClassName("iptTxt grid175 clearfix")(0) a.value = "浜松町" としてみては?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問