我目前正在遍历节点列表并将值植入单元格中,将一个值添加到计数器变量中,并重复执行直到循环结束...
For Each n In myXML.SelectNodes("//a")
.Cells(X, 2).Value = n.Attributes.getNamedItem("href").Text
X = X + 1
Next n
几千行有点慢,所以我想知道是否有更简单的方法来做到这一点?也许通过将列表放入数组然后转置数组?不太确定从哪里开始,但请参阅最后一行以获得想法:/
完整的工作代码如下
Sub gogo()
Dim theXMLstring As String
Dim theXMLdocument As New MSXML2.DOMDocument60
Dim n As MSXML2.IXMLDOMNode
Dim i As Long
theXMLstring = "<table><a href=""no"">hi</a><a href=""yes"">bye</a><a href=""WOAH"">woah</a></table>"
theXMLdocument.LoadXML (theXMLstring)
For Each n In theXMLdocument.SelectNodes("//a")
MsgBox (n.Attributes.getNamedItem("href").Text)
Next n
End Sub
我真正想要的是类似
MyArr() = theXMLdocument.SelectNodes("//a").Attributes.getNamedItem("href").Text
的东西 最佳答案
我不习惯使用XML,但是我敢肯定,仅对工作表编写进行优化会带来巨大的不同(UI与内存):
Dim arr()
For Each n In myXML.SelectNodes("//a")
x=x+1
ReDim Preserve arr(1 to x)
arr(x) = n.Attributes.getNamedItem("href").Text
Next n
Cells(1,1).Resize(x).Value=WorksheetFunction.Transpose(arr)
编辑:尽管
ReDim
优化对单个范围分配是次要的,但我正在发布建议的优化:Dim arr(), nodes, i As Long
Set nodes = myXML.SelectNodes("//a")
ReDim arr(1 To nodes.Length, 1 To 1)
For i = 1 To nodes.Length
arr(i, 1) = nodes(i - 1).Attributes.getNamedItem("href").Text
Next
Cells(1, 1).Resize(nodes.Length).Value = arr