2016-11-12 24 views
0

私は多数のチュートリアルを試してみましたが、この問題を解決しようとしてスタックオーバーフローに長時間を費やしましたが、VBA Excel 2010実行時エラー'91 'オブジェクト変数またはWithブロック変数が設定されていません

私はexcelでVBAで新しく、セルの1つの列からクエリを受け取り、その結果の要素を別の行のセルに書き込むExcelの自動Web検索を取得しようとしています。この例を単純にするために、私はGoogle検索を使用しました。

私はいつも同じメッセージで終わる:

ランタイムerror'91' オブジェクト変数またはWithブロック変数が

error screenshotここ

は、コードの最新のバージョンで設定されていません。

Sub Macro1() 

Dim ie As Object 
Set Rng = Range("A3:A5") 

Set Row = Range(Rng.Offset(1, 0), Rng.Offset(1, 0).End(xlDown)) 

Set ie = CreateObject("InternetExplorer.Application") 
With ie 
    .Visible = True 
    For Each Row In Rng 
    .navigate "https://www.google.com/#q=" & Range("A" & Row.Row).Value 

Do 
    DoEvents 
     Loop Until ie.readyState = READYSTATE_COMPLETE 

     Dim doc As HTMLDocument 
     Set doc = ie.document 
     While ie.readyState <> 4 

Wend 

Range("B" & Row.Row) = doc.getElementById("resultStats" & Range("A" & Row.Row).Value).innerText 

Next Row 

ie.Quit 

End With 

End Sub 

ご協力いただきまして誠にありがとうございます。

おかげで、

+0

'doc.getElementById( "resultStats" &レンジ( "A" &Row.Row).Valueの)'や 'レンジ( "A" &Row.Row)'、おそらくNULL' 'に評価のように思えます。 'Range(" A "&Row.Row)'が実際にはnull以外の値を返し、実際に "resultStatsA"という名前のHTML文書に要素があることを確認できますか? – InfectedPacket

+0

適切な字下げを使用すると、どのコード行がブロックを開き、どの行を閉じることができるのでしょうか?コードの読み込みやトラブルシューティングが容易になります。 – teylyn

答えて

0

それが動作していない理由は、Googleで「resultStats YOURVALUEHERE」という名前のidを持つ要素がないためです。 getElementById("resultStats")は結果の量を返します。 36,100,000 GoogleでVBAを検索すると結果が表示されます。
さらに、Option Explicitを使用してください。

"ヘッダー"と "URL"を返す場合は、これを行うことができます。しかし、A3では1つの値しか持てませんが、これはもちろん修正できます。

Option Explicit 

Sub Macro1() 
Dim rng As Range, Cell As Range 
Dim i As Integer 
Dim IE As Object, objDiv As Object, objH3 As Object, objLink As Object 
Dim strText As String 

Set rng = Range("A3:A5") 

Set Cell = Range(rng.Offset(1, 0), rng.Offset(1, 0).End(xlDown)) 

Set IE = CreateObject("InternetExplorer.Application") 

    With IE 
     .Visible = False ' Change to True if you want to open IE and have it visible 

     For Each Cell In rng 
     .navigate "https://www.google.com/#q=" & Range("A" & Cell.row).value 

     Do 
      DoEvents 
       Loop Until IE.readyState = READYSTATE_COMPLETE 

       Dim doc As HTMLDocument 
       Set doc = IE.document 
       While IE.readyState <> 4 
     Wend 

      ' Add the 5 first results to rows 
      For i = 0 To 4 
       Set objDiv = doc.getElementById("rso") 
       Set objH3 = objDiv.getElementsByTagName("H3")(i) 
       Set objLink = objH3.getElementsByTagName("a")(0) 

       strText = Replace(objLink.innerHTML, "<EM>", "") 
       strText = Replace(strText, "</EM>", "") 

       Dim CellRow As Integer 
       If i = 0 Then 
        CellRow = Cell.row 
       Else 
        CellRow = CellRow + 1 
       End If 

       ' Insert values starting in B3 and C3 and continue with B4, C4, for the next value etc. 
       Cells(CellRow, 2) = strText 
       Cells(CellRow, 3) = objLink.href 
      Next i 

     Next Cell 

    IE.Quit 

    End With 
End Sub 
関連する問題