有没有办法在VBA中选择元素集合中的某些元素?

问题描述 投票:0回答:1

我对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% -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>
html vba loops if-statement screen-scraping
1个回答
0
投票

试试这样的方法

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
© www.soinside.com 2019 - 2024. All rights reserved.