Excel VBA возвращает значения в несколько ячеек из веб-запроса XML
У меня есть данные XML в Интернете. Это цены и ценовые данные игрового предмета:
https://api.eve-central.com/api/marketstat?regionlimit=10000002&typeid=34
Вызов функции для получения ЕДИНСТВЕННОГО значения (например, самый высокий ордер на покупку):
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 Sheets. У меня нет Excel 2013, поэтому я не могу использовать функцию WEBSERVICE или FILTERXML и XPath. У меня никогда не было кода в VBA. Если вы можете поставить здесь окончательный код, я был бы признателен.
1 ответ
Для вашей строки, дающей ошибку:
Cells(R, C) = xmlNode.nodeTypedValue
Можете ли вы попробовать это вместо этого:
Cells(R, C).Value = CStr(xmlNode.nodeTypedValue)