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
我有一个从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