VBA 将数组放入指定单元格

VBA Put the array into the specified cell

我有一个从xpath获取的数组,我想从C~**里放出来,因为数组的项数不一样,下面是我写的解决方法,但是他执行不了

Sub main2()
Dim myURL As String
myURL = "https://exsample.com"

Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.SetProperty "SelectionLanguage", "XPath"
xmlDoc.async = False

With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", myURL, False
    .send
    xmlDoc.LoadXML .responseText
End With

Set nodeXML = xmlDoc.getElementsByTagName("Business_Item_Desc")
For i = 0 To nodeXML.Length - 1
    Sheet4.Range("C1:Z1").Value = nodeXML
Next

End Sub

我认为问题在于您试图将整个 XML 标记放入一个单元格中。 "xmlDoc.getElementsByTagName"returns一个元素集合,所以需要引用集合中的item,引用item的一个属性如下:

Sheet4.Range("C1:Z1").Value = nodeXML.Item(i).Text

您似乎也在尝试将结果写入不同的单元格,因此我们需要更正此行以一次写入一个单元格,如下所示:

Sheet4.Range("C1").Offset(0, 1).Value = nodeXML.Item(i).Text

我已经注释掉了您获取文档的代码部分和 hard-coded 用于示例目的的文档,因此您可以在上下文中查看工作示例:

Sub main2()
    'Dim myURL As String
    'myURL = "https://exsample.com"
    '
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    'xmlDoc.SetProperty "SelectionLanguage", "XPath"
    'xmlDoc.async = False
    '
    'With CreateObject("MSXML2.XMLHTTP")
    '    .Open "GET", myURL, False
    '    .send
    '    xmlDoc.LoadXML .responseText
    'End With
    
    Dim document As String
    document = "<CATALOG>"
    document = document & "  <PLANT>"
    document = document & "    <COMMON>Bloodroot</COMMON>"
    document = document & "    <Business_Item_Desc>Sanguinaria canadensis</Business_Item_Desc>"
    document = document & "    <PRICE>.44</PRICE>"
    document = document & "    <AVAILABILITY>031599</AVAILABILITY>"
    document = document & "  </PLANT>"
    document = document & "    <PLANT>"
    document = document & "    <COMMON>Columbine</COMMON>"
    document = document & "    <Business_Item_Desc>Aquilegia canadensis</Business_Item_Desc>"
    document = document & "    <PRICE>.37</PRICE>"
    document = document & "    <AVAILABILITY>030699</AVAILABILITY>"
    document = document & "  </PLANT>"
    document = document & "</CATALOG>"

    xmlDoc.LoadXML document
    
    Set nodeXML = xmlDoc.getElementsByTagName("Business_Item_Desc")
    For i = 0 To nodeXML.Length - 1
        Sheet4.Range("C1").Offset(0, i).Value = nodeXML.Item(i).Text
    Next

End Sub