我对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>
试试这样的方法
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