2013-11-07 3 views
1

Я пытаюсь создать функцию, которая смотрит на ячейку в моей таблице и возвращает Zoopla Z-Index 'со страницы http://www.zoopla.co.uk/market/uk/. Обратите внимание: market раздел из URL - это единственный бит, который изменяется, например, BS8, BS6 и т. Д., И это должно быть взято из выбранной ячейки из моей электронной таблицы. Затем он должен вернуть значение Z-Index, которое является средней ценой на недвижимость для всех, отдельных, полу и террасы.Извлечь данные из zoopla.co.uk

Это то, что я создал до сих пор.

Код, который я написал, не тянет среднюю фигуру свойства для почтового кода из ячейки A1. Есть идеи?

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Row = Range.("L:L").Row And _ 
    Target.Column = Range.("L:L").Column Then 
    Dim IE As New InternetExplorer 
    IE.Visible = False 
    IE.navigate "www.zoopla.co.uk/market/" & Range("A1/").Value 
    Do 
     DoEvents 
    Loop Until IE.readyState = READYSTATE_COMPLETE 
    Dim Doc As HTMLDocument 
    Set Doc = IE.document 
    Dim sSPAN As String 
    sSPAN = Trim(Doc.getElementsByTagName("span")(1).innerText) 
    sSPAN = Split(sSPAN, vbNewLine)(0) 
    Range("O:O").Value = Split(sSPAN,", ")(0) 
    Range("P:P").Value = Split(sSPAN,", ")(1) 
End If 
End Sub![Data needed][1] 
+0

В чем вопрос? С какими конкретными проблемами вы сталкиваетесь? –

+0

Код, который я написал, не тянет среднюю фигуру свойства для почтового кода из ячейки A1. Есть идеи? Спасибо – user2964645

ответ

4

Ваш скрипт имеет некоторые ошибки, я исправил некоторые строки, он работает:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Const READYSTATE_COMPLETE = 4 

    Dim j 
    Dim xcolElements 
    Dim Doc, el, IE 

    ' 
    ' if the content of the cell L1 changes: 
    ' 
    If Target.Row = Range("L1").Row And _ 
    Target.Column = Range("L1").Column Then 

    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = False 
    IE.Navigate "http://www.zoopla.co.uk/market/" & Range("A1").Value & "/" 
    Do 
     DoEvents 
    Loop Until Not IE.Busy And IE.ReadyState = READYSTATE_COMPLETE 

    Set Doc = IE.Document 

    Set xcolElements = Doc.getElementsByClassName("zoopla") 
    ' 
    j = 1 
    For Each el In xcolElements 
     Range("O" & j).Value = el.FirstChild.Data 
     j = j + 1 
    Next 
    ' 
    IE.Quit 
    ' 
    End If 
    ' 
    ' destruct objects: 
    ' 
    Set el = Nothing 
    Set xcolElements = Nothing 
    Set Doc = Nothing 
    Set IE = Nothing 
    ' 
End Sub 

enter image description here

Вы знаете, что VBA + IE является настолько мощным, что вы можете сделать много вещей, путем адаптации вышеуказанного кода VBA.

Мы используем

Set IE = CreateObject("InternetExplorer.Application") 

Вместо

Set IE = new InternetExplorer.Application 

, чтобы избежать добавления ссылок InternetExplorer.Application ActiveX, сводя к минимуму потребность RAM при открытии документа без использования автоматизации IE.

' 
' to fill C12, C13, C14,... 
' 
j = 12 
For Each el In xcolElements 
    Range("C" & j).Value = el.FirstChild.Data 
    j = j + 1 
Next 
+0

Благодарим вас за помощь и приложенную фотографию! Я использовал ваш код, однако он не импортирует значение Z-индекса для почтового индекса из ячейки A1. В качестве примера - посетите сайт www.zoopla.co.uk/market/BS6. Внизу страницы указано среднее значение для отдельных, полу, террасы и квартиры, 538 059 фунтов стерлингов, 491 683 фунтов стерлингов, 386 899 фунтов стерлингов и 227 765 фунтов стерлингов соответственно. Мне нужны эти цифры для заполнения 4 отдельных клеток. Заранее большое спасибо! – user2964645

+0

@ user2964645, я обновил код. – jacouh

+0

Это невероятно! Спасибо за время! Но последнее. Чтобы изменить местоположение вывода. Я хочу, чтобы он появился в ячейке «C12». Я изменил этот бит кода, но не повезло ... Range («C12» & j) .Value = el.FirstChild.Data j = j + 1 Любые идеи? Спасибо – user2964645