VBA初心者です。
A列のキーワードで、Yahoo検索結果TOP3のURLを取得したいのですが
Sleep 1000 を書き足すと動きません。
よろしくお願いします。
##コード
Sub main() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") Dim i As Long Dim l As Integer For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Sleep 1000 objIE.navigate "https://search.yahoo.co.jp/search?p=" & Replace(Application.EncodeURL(Range("A" & i)), "%20", "+") Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop For l = 0 To 2 Range("B" & i).Offset(, l) = objIE.document.getElementById("WS2m").getElementsByClassName("w")(l).getElementsByTagName("a")(0).href Next l Next i objIE.Quit Set objIE = Nothing End Sub
Yahoo! のサーバに負荷が掛かるので Sleep 無に実行するといずれアクセスを拒否されるかと思います。
Sleep はアクセスとアクセスの間に入れるべきなので、For ループの最初か最後に入れましょう。要は連続したアクセスはサーバに負荷を掛けるという意味です。
何度もしつこいですが、このスクリプトをコピーして試す人がみな Yahoo! に負荷を掛けかねないので Do While のループでなく一番外の For ループの最初もしくは最後に入れておいて下さい。
たびたび ありがとうございます。負荷をかけては大変なのですぐ修正したいのですが For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row 1行下で合っていますでしょうか。(調べ方が悪いようで中々目当ての答えに辿り着けておらずモタついておりすみません)
はい、あってます。急かしてすいません。
ありがとうございます!「SubまたはFunction が定義されていません。」エラーが出るので位置が間違ってるのかと思い調べておりました。取り急ぎ、追記しました。
回答2件
あなたの回答
tips
プレビュー