我在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发布于 2019-07-06 16:36:56
返回集合和循环的:
您不希望将ByClassName和ByTagName链接在一起。其中的选择器仅用于classname,并且足以返回具有该classname的元素集合。
您也不希望在该级别进行索引,如果在循环中使用此类名的所有元素之后。您希望对集合执行For Each操作。然后在循环中使用循环变量oElement;这意味着您可以启动i=1并减少在循环中添加的代码量和调用量。
当然,这将返回驻留在子span标记中的$。
避免/删除$(或子span 内容)的方法:
.innerText上使用Replace$。.innerText上用vbNullString替换oElement.children(0).innerText,或者用oElement.getElementsByTagName("span")(0).innertext替换。我认为后者可能是您之后要做的(但它需要在循环中)。在没有replacement.的情况下,您也可以执行
oElement.FirstChild.NodeValueN.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 语句和工作表变量提高易读性的:
我可能会将工作表放到一个变量中,并确保使用的是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 oElementhttps://stackoverflow.com/questions/56911995
复制相似问题