【问题标题】:Is there a way to select certain elements within an element collection in VBA有没有办法在 VBA 的元素集合中选择某些元素
【发布时间】:2020-09-05 10:36:03
【问题描述】:

我还是 VBA 和数据抓取的新手。我想检查是否有办法在元素集合中选择某些元素。我的 VBA 代码如下:

Sub Refresh()
    Dim XMLPage As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    Dim HTMLTable As MSHTML.IHTMLElementCollection
    Dim Price As Variant, Change As Variant, Volume As Variant
    Dim HTMLTag As MSHTML.IHTMLElement

    XMLPage.Open "GET", Mapping.Range("B2"), False
    XMLPage.send
    HTMLDoc.body.innerHTML = XMLPage.responseText

    Set HTMLTable = HTMLDoc.getElementsByClassName("stockinfocol1")

    For Each HTMLTag In HTMLTable
    Debug.Print HTMLTag.innerText
    Next HTMLTag
End Sub

debug.print 的结果如下:

最后交易股价 1.200

变化 -0.030 / -2.44%

成交量 1,291,800

日范围 1.190 - 1.250

最后交易日期 2020-05-19

备注

但是,我只需要此集合中的某些元素(例如:最后交易的股票价格和交易量)。有没有办法执行 For each 和 IF 语句来筛选我想要的元素?

HTML 代码在这里供您参考:

<div class="stockinfocol1"><div title="AIMS APAC REIT Share Price" class="stockinfocol1row1"><span class="label">Last Traded Share Price </span><span class="value red">1.200</span></div><div class="stockinfocol1row"><span class="label">Change </span><span class="value red" label="change">-0.030 / -2.44%</span></div><div title="AIMS APAC REIT Volume Traded" class="stockinfocol1row"><span class="label">Volume Traded </span><span class="value" label="volume">1,218,700</span></div><div title="AIMS APAC REIT Day Price Range" class="stockinfocol1row"><span class="label">Day Range </span><span class="value" label="Day Range">1.190 - 1.250</span></div><div title="AIMS APAC REIT Last Traded Date" class="stockinfocol1row"><span class="label">Last Traded Date </span><span class="value" label="Last Traded Date">2020-05-19</span></div><div title="AIMS APAC REIT Remarks" class="stockinfocol1row"><span class="label">Remarks </span><span class="value" label="Remarks"> </span></div></div>

【问题讨论】:

  • 可能是更好的方法,但您可以执行If HTMLElement.innertext Like "Last Traded*" Then 'Do something ElseIf HTMLElement.innertext Like "Volume Traded*" Then 'Do something ElseIf... 等类似的操作。

标签: html vba loops if-statement screen-scraping


【解决方案1】:

试试这样的方法

Sub Test()
    Dim html As New HTMLDocument, post As Object, sPriceTraded As String, sVolumeTraded As String, i As Long
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "C:\Sample.html", False
        .send
        html.body.innerHTML = .responseText
    End With
    sPriceTraded = "Last Traded Share Price"
    sVolumeTraded = "Volume Traded"
    Set post = html.querySelectorAll(".stockinfocol1 div")
    With post
        For i = 0 To .Length - 1
            With .Item(i)
                If InStr(.innerText, sPriceTraded) Then
                    Debug.Print Trim(Replace(.innerText, sPriceTraded, vbNullString))
                End If
                If InStr(.innerText, sVolumeTraded) Then
                    Debug.Print Trim(Replace(.innerText, sVolumeTraded, vbNullString))
                End If
            End With
        Next i
    End With
End Sub

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2020-09-15
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2013-02-04
    • 2018-10-08
    相关资源
    最近更新 更多