我在VBA中有此代码,我想提取obj-amount
div类的'15'。有什么建议吗?
<div class="obj-amount">15<span class="unit">$</span></div>
Set divtags = oHtml.getElementsByClassName("obj-amount")(0).getElementsByTagName("obj-amount")
i = 0
For Each oElement In divtags
Sheets("Data").Range("A" & i + 1) = divtags(i).innerText
i = i + 1
Next oElement
答案 0 :(得分:0)
返回收藏夹并循环播放:
您不想将ByClassName
和ByTagName
链接在一起。您内部的选择器仅用于类名,足以返回具有该类名的元素的集合。
如果在所有具有该类名称的元素之后进行循环,则也不想在该级别建立索引。您想For Each
浏览集合。然后在循环中,您要使用循环变量oElement
;这意味着您可以启动i=1
并减少代码量并减少循环调用。
这当然会返回位于子$
标记中的span
。
避免/删除$(或子span
内容)的方法:
Replace$
上使用.innerText
。 oElement.children(0).innerText
上的vbNullString
或.innerText
替换oElement.getElementsByTagName("span")(0).innertext
。我认为后者可能是您所做的事情(但必须在循环中。)。 oElement.FirstChild.NodeValue
。N.B。
您可以使用哪种方法取决于声明divtags
和oElement
的方式。
长文本版本:
Set divtags = ohtml.getElementsByClassName("obj-amount") '<== collection matched by classname
i = 1
For Each oElement In divtags '<== loop each item in collection
Worksheets("Data").Range("A" & i) = oElement.innerText
'Worksheets("Data").Range("A" & i) = oElement.FirstChild.NodeValue
'Worksheets("Data").Range("A" & i) = Replace$(oElement.innerText,"$", vbNullString) '<==replacement if wanted
'Worksheets("Data").Range("A" & i) = Replace$(oElement.innerText,oElement.children(0).innerText, vbNullString) '<==replacement if wanted and first child text not constant
'Worksheets("Data").Range("A" & i) = Replace$(oElement.innerText,oElement.getElementsByTagName("span")(0).innertext, vbNullString) '<==replacement if wanted and child span text not constant
i = i + 1
Next oElement
使用With
语句和Worksheet变量以提高可读性:
我可能会将工作表放入变量中,并确保我正在使用Worksheets
集合。我还可以使用With
语句在循环内保存对oElement
的引用,以便使用点访问器.
来提高可读性:
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Data")
Set divtags = ohtml.getElementsByClassName("obj-amount")
i = 1
For Each oElement In divtags
With oElement
ws.Range("A" & i) = .FirstChild.NodeValue
ws.Range("A" & i) = Replace$(.innerText, "$", vbNullString) 'next two lines are alternativeS based on need
ws.Range("A" & i) = Replace$(.innerText, .Children(0).innerText, vbNullString)
ws.Range("A" & i) = Replace$(.innerText, .getElementsByTagName("span")(0).innerText, vbNullString)
End With
i = i + 1
Next oElement