В моем предыдущем вопросе (в этом вопросе есть все необходимое, ссылка здесь ради полноты и меры) я прошу способ вытащить XML-данные в Excel из Интернета. Код, который я получил (любезно предоставлен user2140261) в качестве ответа, лежит здесь:
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
Но у каждой компании есть отдельный экземпляр XML-документа, и каждый раз компания публикует другой экземпляр XML-документа (например, ежеквартально, ежегодно). Таким образом, к этим документам можно получить доступ из разных веб-сайтов.
Теперь в предыдущей процедуре мы видим, что нам нужно использовать только оператор
strXMLSite = "http://www.sec.gov/Archives/edgar/data/10795/000119312513456802/bdx-20130930.xml"
... но это когда мы заранее знаем, что нам нужны данные из одного указанного места в Интернете
Что, если мы хотим получить некоторые данные для этих 4 разных местоположений, обозначенных звездочкой (*) на изображении ниже.
Как мы могли бы на самом деле ввести наши «координаты» в Excel, скажем, в одну из наших пользовательских форм/ячеек, например, а затем заставить VBA «навигировать/сканировать» там, просто используя эти координаты так же, как мы перемещаемся туда с помощью браузера?
Координаты, которые мы вводим, могут быть:
- Тикер акций (например, TSLA для Tesla Motors)
- Тип файлов, например 10-Q's
Вы можете выбрать тип файлов в этих ссылках для BDX и ANN соответственно:
Ниже у нас есть 2 веб-сайта для местоположений экземпляра документа компании BDX и 2 для компании ANN.
Компания БДС
http://www.sec.gov/Archives/edgar/data/10795/000119312514042815/bdx-20131231.xml http://www.sec.gov/Archives/edgar/data/10795/000119312513318898/bdx-20130630.xml
Компания ИНС
http://www.sec.gov/Archives/edgar/data/874214/000087421413000036/ann-20131102.xml http://www.sec.gov/Archives/edgar/data/874214/000087421413000027/ann-20130803.xml
Как мы можем извлечь из элемента XML, существующего во всех четырех экземплярах документов, например us-gaap:CommonStockValue
, просто предоставив VBA
- Тикер акций
- Тип документа (10-К, 10-К)
Можно ли это сделать с помощью Microsoft XML Базовые службы (MSXML) или нам нужна еще какая-то библиотека?
Вы можете видеть, насколько непрактично запускать этот код тысячу раз и каждый раз копировать URL-адрес из веб-браузера в strXMLSite в виде строкового значения....