VBA вытащить данные XML в Excel
Сложный вопрос по VBA Пожалуйста, смотрите фотографии для точного представления проблемы
Если вы наберете в Google "SEC EDGAR" , и вы вводите BDX в поле поиска компании нажмите кнопку Поиск, а затем в результатах поиска вы нажимаете первую кнопку документа и вы выбираете 10-K, вы попадаете в поле подачи. Оттуда, если мы выберем XBRL INSTANCE DOCUMENT , Наконец, внутри документа XML в элементах как вы можете видеть на последнем рисунке, у нас есть элемент и его имя.
Можно ли как-нибудь вытащить эту вещь с помощью 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