2017-01-09 3 views
0

У меня есть код ниже, в котором я пытаюсь открыть ряд URL-адресов и извлекать данные из каждого URL-адреса (пример: http://apps.mohltc.ca/ltchomes/detail.php?id=2588&lang=en). Для меня наибольший интерес представляют те, которые обозначены как «Местная сеть интеграции в области здравоохранения», «Лицензиат» и «Лицензионные кровати».GetElementsByTagName Возвращение [object HTMLParagraphElement]

Как бы то ни было, я пытаюсь просто вытащить все элементы с именем тега «p» и обработать данные, очищаемые позже. В настоящее время мой код вставляет элемент [object HTML Paragraph Element] вместо массива, на который я надеюсь. Может кто-нибудь объяснить, почему это так?

Sub ImportLicenseeData() 

Dim ie As Object 
Dim LH As Object 
Dim r As Integer 

Set ie = CreateObject("InternetExplorer.Application") 

For r = 4 To 10 
    With ie 
     ie.Visible = False 
     ie.Navigate Cells(r, "H").Value 
     Do While (ie.Busy Or ie.ReadyState <> 4): DoEvents: Loop 

    Set Doc = ie.Document 

    Set LH = Doc.getElementsByTagName("p") 

    End With 

    Worksheets("Sheet1").Range("J" & r).Value = LH 

Next r 

End Sub 

Любая помощь приветствуется.

+0

'Set LH = Doc.getElementsByTagName ("р")' 'возвращает объект DispHTMLElementCollection', но не массив. Вы должны создать цикл цикла через коллекцию. – omegastripes

ответ

0
Dim LH As IHTMLElementCollection 
Dim htmlEle1 as IHTMLElement 

Для этого требуется ссылка на библиотеку Microsoft HTML. Затем вы можете взаимодействовать с элементами коллекции LH (это не массив):

Set LH = Doc.getElementsByTagName("p") 

For Each htmlEle1 in LH 
    Debug.Print htmlEle1.innerText 
Next htmlEle1 
+0

Когда я редактирую, чтобы отразить выше, я получаю ошибку несоответствия типа для Set LH = Doc.getElementsByTagName ("p") Как бы я мог отладить это? – JPJP

+1

@JPJP 'Dim LH As IHTMLElementCollection' – omegastripes

+0

@omegastripes, который является истинным' HTMLObjectElement', будет работать как предок другой коллекции объектов, а не самой коллекции. Я изменил его. –

0

Спасибо за помощь всем. Я не был слишком знаком с обработкой HTML-элементов, поэтому в итоге я пошел с другим подходом. Цените обратную связь независимо.

с помощью http://www.ozgrid.com/forum/showthread.php?t=178150

Sub RetrieveHTML() 

Dim rngSelect As Range 
Dim sURL As String 

Set rngSelect = Range("H8", Range("H8").End(xlDown)) 
Debug.Print rngSelect.Address 

Set ie = CreateObject("InternetExplorer.Application") 

For Each c In rngSelect 
    sURL = c.Value 
    With ie 
     .Visible = False 
     .Navigate sURL 
     Do Until .ReadyState = 4 
      DoEvents 
     Loop 
     Do While .Busy: DoEvents: Loop 
      Range(c.Address).Offset(0, 1).Value = ie.Document.DocumentElement.outerHTML 
     End With 
    Next c 

End Sub 

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

  • Нет связанных вопросов^_^