プロが教える店舗&オフィスのセキュリティ対策術

初めまして
これまで営業でしたが、今週より人手不足の為急遽内勤業務もすることになりました。
色々な物の価格データ収集を行うよう指示されましたがWEBからすべてをコピペできなかった為、
自動化含めてVBAに取り組みだしました。
基本的なエラーだという事は分かりましたが勉強し始めで知識不足から壁にぶち当たっています。
皆様の知識をお借りしたいと思いますのでご教授のほどお願いします。
・やりたい事 ページ内のHTML要素 <td class='spec'>に紐づいているURLを全て取得したいです。

Sub リンク取得P222()

Dim ObjBrw As Object
Dim temp As Object
Dim i As Long
Dim objIE As InternetExplorer
i = 2
Set ObjBrw = CreateObject("InternetExplorer.Application")
With ObjBrw
.navigate "http://www.p-souba.com/krank_1.htm"
.Visible = True

Do While .Busy = True Or .readyState <> 4
Loop

If TypeName(.document) = "HTMLDocument" Then

Cells(i, 1).Value = .document.Title
i = i + 1

For i = 0 To objIE.document.getElementsByClassName("spec").Length - 1

Cells(i, 2).Value = temp.innerText

Cells(i, 3).Value = temp.href
i = i + 1

Next

End If
End With

”オブジェクト変数またはwithブロック変数が設定されていません
宜しくお願いします。

A 回答 (2件)

こんにちは



今、スマホからなので見た目だけでの回答になりますけれど、見落しもあるとは思いますが・・・

エラーは、
>Dim objIE As InternetExplorer
で発生していると想像します。
No1様がご指摘のように参照設定をしても良いですし、あるいはVariantまたはObjectで定義しておけば参照設定をしなくても大丈夫と思います。

また、
>For i = 0 To objIE.document.getElementsByClassName("spec").Length - 1
>Cells(i, 2).Value = temp.innerText
>Cells(i, 3).Value = temp.href
>i = i + 1
>Next

ループ内にtempへの代入がないので、値が代わり様がないです。
でも、その前に、
>Cells(i, 2)
で、最初のi=0が「インデックスが不正」のエラーの原因となると思います。。
さらに前の方の処理ででTitleをシートの2行目に記入しているので、3行目から記入していかないと上書きしてしまうことになります。

タイトル記入部分の、
>i = 2
>Cells(i, 1).Value = .document.Title
>i = i + 1
というiの制御もあまり意味がないです。
一度だけの実行なので、
 Cells(2, 1).Value = .document.Title
の処理ですみますし、i = i + 1としても、以降でiを制御し直しているので意味がなくなっています。

さらには、ループ内で制御変数iを変更してしまっているのは混乱の元です。
iを自分でコントロールするのならば、
 For Each ~~ In ~~
の構文を利用した方が良いでしょう。
https://docs.microsoft.com/ja-jp/dotnet/visual-b …
    • good
    • 0
この回答へのお礼

たくさんのご指摘有難うございます。
解決まで至っていませんが、基礎勉強しながら解決方法模索してみます。
有難うございました。

お礼日時:2020/02/03 14:25

多分「Microsoft Internet Controls」が参照設定されていないだけだと思います。



VBAのエディタの画面の「ツール」「参照設定」で「Microsoft Internet Controls」にチェックをいれて「OK」ボタンを押してください。
「VBA IE操作」の回答画像1
    • good
    • 0
この回答へのお礼

ご返答有難うございます。
設定の方は確認しましたがごしてきいただいた個所にはチェックが入っ
おりました。他回答と合わせて解決できるよう勉強します。
有難うございます。

お礼日時:2020/02/03 09:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!