VBA вытащить данные XML в Excel

Сложный вопрос по VBA Пожалуйста, смотрите фотографии для точного представления проблемы

Если вы наберете в Google "SEC EDGAR" Шаг 1, и вы вводите BDX в поле поиска компании Шаг 2 нажмите кнопку Поиск, а затем в результатах поиска вы нажимаете первую кнопку документа Шаг 3 и вы выбираете 10-K, вы попадаете в поле подачи. Оттуда, если мы выберем XBRL INSTANCE DOCUMENT Шаг 4, Наконец, внутри документа XML в элементах Million Pains-For-Me Вопрос как вы можете видеть на последнем рисунке, у нас есть элемент и его имя.

Можно ли как-нибудь вытащить эту вещь с помощью VBA и поместить ее в ячейку Excel нашего предпочтения? Я новичок в VBA, поэтому, пожалуйста, будьте добры, объясните немного код, а также какие ссылки мы добавляем из Инструментов в VBE и почему.

То, что я на самом деле ищу, это блок кода, который захватывает данные между элементами XML (** Важно: документ экземпляра XML должен находиться в указанном веб-расположении.) ** Например, в <Current> 5 </Current)> что-то, что будет тянуть 5 и заполнить ячейку, обозначенную в блоке кода, и некоторые инструкции, чтобы я мог держаться за нее и изучать код ****

ЭТОТ ВОПРОС ОТВЕТ. В ПОРЯДКЕ ДЛЯ КОДА В ОТВЕТЕ НА РАБОТУ ВЫ ДОЛЖНЫ ВКЛЮЧИТЬ Microsoft XML, V6.0 в Инструменты VBE -> Ссылки

1 ответ

Решение

Вы все равно должны попытаться узнать о Microsoft XML Core Services (MSXML), но для начала вы можете начать со следующего и изменить его по мере необходимости. Если вам нужно много значений, то стоит зациклить ChildNodes из objXMLNodexbrl так как многие узлы также кажутся дублированными.

Вместо того, чтобы использовать <Current> в моем примере я использовал фактическое значение для us-gaap:DebtInstrumentInterestRateStatedPercentage (тот, который вы обвели в своем вопросе)

Sub GetNode()
Dim strXMLSite As String
Dim objXMLHTTP As MSXML2.XMLHTTP
Dim objXMLDoc As MSXML2.DOMDocument
Dim objXMLNodexbrl As MSXML2.IXMLDOMNode
Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode

Set objXMLHTTP = New MSXML2.XMLHTTP
Set objXMLDoc = New MSXML2.DOMDocument

strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"

objXMLHTTP.Open "POST", strXMLSite, False
objXMLHTTP.send
objXMLDoc.LoadXML (objXMLHTTP.responseText)

Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("xbrl")

Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode("us-gaap:DebtInstrumentInterestRateStatedPercentage")

Worksheets("Sheet1").Range("A1").Value = objXMLNodeDIIRSP.Text
End Sub
Другие вопросы по тегам