我目前正在遍历节点列表并将值植入单元格中,将一个值添加到计数器变量中,并重复执行直到循环结束...

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

10-05 23:40