1

我正在尝试创建一个函数来查看我的电子表格中的一个单元格并从页面返回 Zoopla 'Z-Index' http://www.zoopla.co.uk/market/uk/。请注意,marketURL 中的部分是唯一更改的部分,例如 BS8、BS6 等,这应该取自我的电子表格中的选定单元格。然后它应该返回 Z-Index 值,这是 All、Detached、Semi 和 Terrace 的平均房产价格。

这是我到目前为止所创造的。

我编写的代码没有从单元格 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]
4

1 回答 1

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

在此处输入图像描述

要知道 VBA+IE 的强大,可以通过改编上面的 VBA 代码来做很多事情。

我们用

Set IE = CreateObject("InternetExplorer.Application")

代替

Set IE = new InternetExplorer.Application

避免添加 InternetExplorer.Application ActiveX 引用,在不使用 IE 自动化的情况下打开文档时最大限度地减少 RAM 需求。

'
' to fill C12, C13, C14,...
'
j = 12
For Each el In xcolElements
  Range("C" & j).Value = el.FirstChild.Data
  j = j + 1
Next
于 2013-11-07T12:51:51.823 回答