Excel VBA возвращает значения в несколько ячеек из веб-запроса XML

У меня есть XML-данные в Интернете. Это цены и ценовые данные внутриигрового предмета:

https://api.eve-central.com/api/marketstat?regionlimit=10000002&typeid=34

Вызов функции для получения значения SINGLE (например, наивысшего ордера на покупку):

     A       B
1 ItemID  buy/max
2  34      =ImportXML("https:// ... &typeid=34", "//buy/max")
3  35

Функция выглядит так:

Function ImportXML(url As String, query As String)

Dim document    As MSXML2.DOMDocument60
Dim http        As New MSXML2.XMLHTTP60

http.Open "GET", url, False
http.send

Set document = http.responseXML

ImportXML = document.SelectSingleNode(query).nodeTypedValue

End Function

Это нормально для одного значения. Если у меня будет 500 элементов, получение данных займет очень много времени. Чтобы заполнить несколько ячеек (в данном случае только две), нам нужно изменить входную ссылку, добавив & typeid = 35:

https://api.eve-central.com/api/marketstat?regionlimit=10000002&typeid=34&typeid=35

С помощью этой ссылки я могу получить два значения в MsgBox. Но мне нужно поработать с этими данными, поэтому они нужны мне в ячейке B3. Теперь код выглядит так:

Function ImportXML(url As String, query As String)

Dim document    As MSXML2.DOMDocument60
Dim http        As New MSXML2.XMLHTTP60

http.Open "GET", url, False
http.send

Set document = http.responseXML

Dim R As Integer
Dim C As Integer
R = ActiveCell.Row                         '<- these variables are for changing'
C = ActiveCell.Column                      '<- output cell'

Set xmlNodeList = document.SelectNodes(query)
For Each xmlNode In xmlNodeList
    Cells(R, C) = xmlNode.nodeTypedValue   '<- THIS LINE CAUSE AN ERROR'
    'MsgBox xmlNode.nodeTypedValue          <- if that line is active I got correct result'
    R = R + 1                                 'but in MsgBox' 
Next xmlNode

End Function

Когда я пытаюсь записать данные из запроса в ячейки, возникает проблема. Я пытаюсь добиться аналогичного поведения функции ImportXML из веб-службы Google Таблиц. У меня нет Excel 2013, поэтому я не могу использовать функцию WEBSERVICE или FILTERXML и XPath. Я никогда не писал код на VBA. Если Вы можете поместить сюда окончательный код, я был бы признателен.


person agr    schedule 21.04.2016    source источник


Ответы (1)


Для вашей строки, дающей ошибку:

Cells(R, C) = xmlNode.nodeTypedValue

Можете ли вы попробовать это вместо этого:

Cells(R, C).Value = CStr(xmlNode.nodeTypedValue)
person Robin Mackenzie    schedule 13.06.2016