返回一个集合并循环:
您不想将ByClassName 和ByTagName 链接在一起。您的内部选择器仅用于类名,足以返回具有该类名的元素集合。
您也不想在该级别索引,如果所有元素都具有此类名称的循环。你想For Each 收藏。然后在循环中你想使用循环变量oElement;这意味着您可以启动 i=1 并减少代码量和循环中的添加调用。
这当然会返回位于子span 标记中的$。
避免/删除 $(或子 span 内容)的方法:
- 如果不需要,最简单的删除方法是在循环期间在
.innerText 上使用Replace$。
- 如果该文本不是常量,那么您可以在
.innerText 或oElement.getElementsByTagName("span")(0).innertext 上将oElement.children(0).innerText 替换为vbNullString。我认为后者可能是你在做的事情(但它需要在循环中。)。
- 您也可以在不替换的情况下完成
oElement.FirstChild.NodeValue。
注意
您可以使用哪些方法取决于您声明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