Добрый день! Вопрос по коду выбора курса валют за указанную дату: [vba]
Код
Sub KURS() Dim xmldoc, nodeList, RateDate As Date, Result On Error Resume Next RateDate = "03.03.2021" Set xmldoc = CreateObject("Msxml2.DOMDocument"): xmldoc.async = False
If Not xmldoc.Load("https://cbu.uz/ru/arkhiv-kursov-valyut/xml/all/" & _ Format(RateDate, "yyyy-mm-dd") & "/") Then Exit Sub Set nodeList = xmldoc.SelectNodes("//CcyNtry[@ID='840']")
Result = nodeList.NodeValue ' в этой строке я обращаюсь к свойству объекта xmlNodes - NodeValue. Возвращает пустое значение
Debug.Print nodeList End Sub
[/vba]
Почему Result возвращает пустое значение? Что можно почитать по работе с xml из Excel?
Всем большое спасибо!
Добрый день! Вопрос по коду выбора курса валют за указанную дату: [vba]
Код
Sub KURS() Dim xmldoc, nodeList, RateDate As Date, Result On Error Resume Next RateDate = "03.03.2021" Set xmldoc = CreateObject("Msxml2.DOMDocument"): xmldoc.async = False
If Not xmldoc.Load("https://cbu.uz/ru/arkhiv-kursov-valyut/xml/all/" & _ Format(RateDate, "yyyy-mm-dd") & "/") Then Exit Sub Set nodeList = xmldoc.SelectNodes("//CcyNtry[@ID='840']")
Result = nodeList.NodeValue ' в этой строке я обращаюсь к свойству объекта xmlNodes - NodeValue. Возвращает пустое значение
Debug.Print nodeList End Sub
[/vba]
Почему Result возвращает пустое значение? Что можно почитать по работе с xml из Excel?
Sub KURS() Dim xmldoc, nodeList, RateDate As Date, Result On Error Resume Next RateDate = "03.03.2021" Set xmldoc = CreateObject("Msxml2.DOMDocument"): xmldoc.async = False
If Not xmldoc.Load("https://cbu.uz/ru/arkhiv-kursov-valyut/xml/all/" & _ Format(RateDate, "yyyy-mm-dd") & "/") Then Exit Sub Set nodeList = xmldoc.SelectSingleNode("//CcyNtry[@ID='840']/Rate") Result = nodeList.Text '' как можно объект вывести в консоль Debug.Print nodeList End Sub
[/vba]
Ищите в сети xPath [vba]
Код
Sub KURS() Dim xmldoc, nodeList, RateDate As Date, Result On Error Resume Next RateDate = "03.03.2021" Set xmldoc = CreateObject("Msxml2.DOMDocument"): xmldoc.async = False
If Not xmldoc.Load("https://cbu.uz/ru/arkhiv-kursov-valyut/xml/all/" & _ Format(RateDate, "yyyy-mm-dd") & "/") Then Exit Sub Set nodeList = xmldoc.SelectSingleNode("//CcyNtry[@ID='840']/Rate") Result = nodeList.Text '' как можно объект вывести в консоль Debug.Print nodeList End Sub
Решил вопрос обращением к дочернему элементу узла следующим кодом: [vba]
Код
Sub КУРСДОЛЛАРА_UZ() Dim xmldoc, nodeList, Result, RateDate As Date RateDate = "11.12.2018" On Error Resume Next Set xmldoc = CreateObject("Msxml2.DOMDocument"): xmldoc.async = False
If Not xmldoc.Load("https://cbu.uz/ru/arkhiv-kursov-valyut/xml/all/" & _ Format(RateDate, "yyyy-mm-dd")) Then Exit Sub Set nodeList = xmldoc.SelectNodes("//CcyNtry[@ID='840']") If nodeList.Length Then Result = nodeList.Item(0).ChildNodes(7).Text Debug.Print Result End If End Sub
[/vba]
Всем спасибо!
Решил вопрос обращением к дочернему элементу узла следующим кодом: [vba]
Код
Sub КУРСДОЛЛАРА_UZ() Dim xmldoc, nodeList, Result, RateDate As Date RateDate = "11.12.2018" On Error Resume Next Set xmldoc = CreateObject("Msxml2.DOMDocument"): xmldoc.async = False
If Not xmldoc.Load("https://cbu.uz/ru/arkhiv-kursov-valyut/xml/all/" & _ Format(RateDate, "yyyy-mm-dd")) Then Exit Sub Set nodeList = xmldoc.SelectNodes("//CcyNtry[@ID='840']") If nodeList.Length Then Result = nodeList.Item(0).ChildNodes(7).Text Debug.Print Result End If End Sub
Так не делается, или перебираете дочерние элементы и по имени определяете нужный, или через SelectSingleNode. Порядок может поместятся в любой моментdoober