Пользовательская функция Excel для извлечения данных XML

Я хотел бы создать пользовательскую функцию, которая будет извлекать определенные данные в виде ссылки URL-адреса XML. Это первый раз, когда я занимаюсь XML в Excel, не говоря уже о VBA, и борюсь с ним.

Я смог написать процедуру (извлечение обменного курса местной валюты), которую можно запустить, просто нажав пользовательскую кнопку, которая запускает код ниже:

Sub FX_Retrieve() Dim FX As String Dim CustomDate As String FX = Range("FX") CustomDate = Range("CustomDate") Application.ScreenUpdating = False ActiveSheet.Unprotect Rows(2).Clear ActiveWorkbook.XmlImport URL:= _ "http://www.cbu.uz/section/rates/widget/xml/" & FX & "/" & CustomDate, ImportMap:= _ Nothing, Overwrite:=True, Destination:=Range("C2") Range("D:D").EntireColumn.AutoFit Rows(2).HorizontalAlignment = xlCenter Columns(6).ClearContents ActiveSheet.Protect Application.ScreenUpdating = True End Sub 

На всякий случай, результат XML выглядит следующим образом: 2015-12-29 USD 2809.98 1 Следовательно, необходимость в некотором форматировании в моем коде.

Нет проблем с этой процедурой в случае одного звонка за курс FX! Теперь я хочу пойти немного дальше и создать функцию. И здесь я сталкиваюсь с несколькими проблемами:

  1. Мне нужно извлечь определенный дочерний узел (скорость) из вывода xml, который выглядит следующим образом:

'

 <response> <date_act>2015-12-29</date_act> <symbol>USD</symbol> <rate>2809.98</rate> <size>1</size> </response> 

Я уже нашел нечто подобное (как здесь: Excel VBA получает определенный узел из XML ), но я не могу применить его в моем случае.

  1. создание функции, насколько я вижу, не позволит использовать тот же подход, что и в моей процедуре.

Любая помощь приветствуется!

Благодаря сайту AnalystCave.com, который работает @Dick Kusleika, мне удалось адаптировать представленную им информацию по теме «Работа с файлами XML» к моей проблеме и успешно ее разрешили. На всякий случай у кого-то такая же проблема, вот мой код (я просто надеюсь, что он программно эффективен):

 Public Function GetCurrToUZS(ByRef Curr As String, ByRef date_param As Date) As Currency Dim XDoc As Object Dim lists Dim getThirdChild Dim corrDate As String If Len(Curr) <> 3 Then MsgBox "Currency name must be 3 letters long!", vbCritical + vbOKOnly _ , "VARIABLE ERROR!" Exit Function End If 'corrects the entered date to the required format of "YYYY-MM-DD" corrDate = Year(date_param) & "-" & Month(date_param) & "-" & Day(date_param) Set XDoc = CreateObject("MSXML2.DOMDocument") XDoc.async = False: XDoc.validateOnParse = False XDoc.Load "http://www.cbu.uz/section/rates/widget/xml/" & Curr & "/" & corrDate 'Get Document Elements Set lists = XDoc.DocumentElement Set getThirdChild = lists.ChildNodes(2) GetCurrToUZS = getThirdChild.Text 'output of the function Set XDoc = Nothing 'terminates xDoc Object End Function 
  • Иностранная валюта в Excel xslt
  • Автоматизация Excel для бизнес-решений и обработка на стороне сервера
  • Используйте VBA для вставки большого XML-файла в другой
  • Office 2007/2010 Пользовательский интерфейс ленты Как изменить цвет TAB XML TAG
  • Excel и «нечитаемый контент» при создании электронной таблицы Open XML с помощью MemoryStream
  • Как я могу создать файл Excel без установки Office или любых зависимостей сторонних разработчиков?
  • exce vba открыть файл xml независимо от того, используется ли его другим пользователем
  • Как я могу автоматизировать листы EXCEL, Mysql и XML?
  • Открытие XML-файла с помощью EpPlus
  • конвертировать xml в excel с помощью определенного элемента xml с помощью java
  • Как расширить Excel xml-карту до всех строк в excel
  • Interesting Posts

    Проверка повторяющихся значений на листе перед вводом новой записи данных

    Значение ячейки поиска по частям, замена всей стоимости ячейки

    Как заставить макрос фильтрации Excel правильно использовать язык даты?

    Пакетное преобразование координат, ошибка в определении класса

    Macro Excel: для вставки круга в определенный диапазон в ячейке

    Определить, существует ли файл

    Проверьте, существуют ли именованные таблицы VBA Excel 2007

    Способ не использовать проверку подлинности Windows для запроса ODBC на SQL-сервер

    Начальное поведение в Excel Mac изменяется, когда Auto_Open надстройки имеет MsgBox

    Сохранение буфера обмена при загрузке VSTO

    Определить значение в зависимости от категориальных переменных

    найти последний день любого рабочего дня в месяце

    excel вычисляет рабочие дни между датами, дает #value error

    Преобразование больших файлов Excel в CSV

    Колонка обновления SQL 2005 для вставки

    Давайте будем гением компьютера.