2016-06-07 1 views
2
Sub amazon() 

Dim x As Long 
Dim y As Long 
Dim doc As HTMLDocument 
Dim htmTable As HTMLTable 
Dim Elements As IHTMLElementCollection 
Dim Element As IHTMLElement 
Dim bf As String 
Dim str As String 
Dim af As String 
Dim title As String 
Dim prc() 
Dim SrtTemp As Variant 
Dim i As Long, q As Long 
Dim j As Long 
Dim n As Long 
    n = Sheets("temp").Cells(Rows.Count, 5).End(xlUp).Row 
For q = 7 To n 
    Sheets("temp").Cells(q, 5) = "" 
    Sheets("temp").Cells(q, 6) = "" 
Next q 
str = "" 
    str = Sheets("temp").Cells(1, 4) 
    With CreateObject("MSXML2.XMLHTTP") 
    .Open "GET", "http://www.amazon.in/s/ref=sr_nr_n_0?fst=as%3Aoff&rh=n%3A976419031%2Cn%3A1805560031%2Ck%3A" & str & "&keywords=" & str & "&ie=UTF8&qid=1437023564&rnid=976420031", "" 
    .send 

    Do: DoEvents: Loop Until .readyState = 4 
    Set doc = New MSHTML.HTMLDocument 
    doc.body.innerHTML = .responseText 

     Set Elements = doc.getElementsByClassName("s-item-container") 
     x = Elements.Length 
     '' Debug.Print x 
     ReDim prc(0 To x) 
     z = 7 
     y = 0 
     For Each Element In Elements 
      title = Element.Children(1).innerText 
      '' Debug.Print title 
      If InStr(UCase(title), UCase(str)) Then 
        Sheets("temp").Cells(z, 5) = title 
        Price = Element.Children(2).Children(0).Children(0).innerText 
        If InStr(UCase(Price), UCase("offer")) = 0 Then 

         bf = Price 
         '' Debug.Print bf 
         prc(y) = Trim(CDbl(bf)) 
         On Error Resume Next 
         '' Debug.Print prc(y) 
         Sheets("temp").Cells(z, 6) = prc(y) 
        Else 
      '' bf = Element.Children(2).Children(3).Children(0).Children(3).innerText 
         bf = Price 
         '' Debug.Print bf 

         prc(y) = Trim(CDbl(Right(bf, 9))) 
         Sheets("temp").Cells(z, 6) = prc(y) 

         '' Debug.Print prc(y) 
        End If 
        y = y + 1 
        z = z + 1 
      End If 
     Next Element 
     Set Elements = Nothing 

     .abort 
     On Error Resume Next 
    End With 

End Sub 

Когда я отлаживаю ошибку, я получаю ошибку Ошибка выполнения «91»: переменная объекта или с переменной блока, не заданной в этой строке заголовка = Element.Children (1) .innerText Пожалуйста, помогите мне решить эту проблему.Ошибка времени выполнения '91': переменная объекта или с переменной блока не установлена ​​

Я использую amazon в качестве макроса в своем рабочем листе Excel. Я использую excel 2016, и когда я отлаживаю этот макрос, я получаю эту ошибку. Поэтому просьба предоставить решение для решения этой проблемы.

Если я использую Set title = Element.Children (1) .innerText, то я получаю Object required error.

Я новичок в Vba, поэтому, пожалуйста, помогите мне решить эту проблему.

ответ

0

Try:

if not Element is nothing then 
    if not Element.Children(1) is nothing then 
     title = Element.Children(1).innerText 
    end if 
end if 
+0

Хотя этот фрагмент кода может решить вопрос, [включая пояснения] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. –

Смежные вопросы

 Смежные вопросы