Exo*_*ant 1 xml excel vba excel-vba
我正在尝试修改从user2140261获得的一段很好的代码,该代码从XML类型(XBRL模板)SEC EDGAR数据库中提取数据。因此,由于我也想从其他Node中提取元素值,因此我的第一个想法是在MsgBox中显示带有XML实例的Node的列表。通过使用childNodes属性。第一个小片段具有我为避免混淆而进行的较小修改,而在第二个中,我们看到了原始代码以及修改的3条语句
Dim Tiger As String
Tiger = objXMLNodexbrl.ChildNodes(1)
MsgBox Tiger
Run Code Online (Sandbox Code Playgroud)
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
Dim Tiger As String
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")
Tiger = objXMLNodexbrl.ChildNodes(1)
MsgBox Tiger
Set objXMLNodeDIIRSP = objXMLNodexbrl.SelectSingleNode("us-gaap:DebtInstrumentInterestRateStatedPercentage")
Worksheets("Sheet1").Range("A1").Value = objXMLNodeDIIRSP.Text
End Sub
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试使用F8逐步解析代码时,出现“运行时错误438”,告诉我该对象不支持此属性或方法。

@ user2140261哇,您太对了...只是一个问题,我确实使用
Tiger = objXMLNodexbrl.ChildNodes(1).Text
Run Code Online (Sandbox Code Playgroud)
但是我正在获取元素的数值,而不是节点数。那怎么可能?由于ChildNodes属性:“包含包含子节点的节点列表” ...

从以下位置更改代码行:
Tiger = objXMLNodexbrl.ChildNodes(1)
Run Code Online (Sandbox Code Playgroud)
至
Tiger = objXMLNodexbrl.ChildNodes(1).Text
Run Code Online (Sandbox Code Playgroud)
ALTERNATIVLY你可以
将Tiger从字符串更改为MSXML2.IXMLDOMNode
然后改变
MsgBox Tiger
Run Code Online (Sandbox Code Playgroud)
至
MsgBox Tiger.Text
Run Code Online (Sandbox Code Playgroud)
objXMLNodexbrl.ChildNodes.Length 将返回其中的节点数 XBRL
如果您试图获取XBRL的所有子节点名称的列表,则请调暗另一个MSXML2.IXMLDOMNode nodeCurrent并使用以下命令:
For Each nodeCurrent In objXMLNodexbrl.ChildNodes
Tiger = Tiger & ", " & nodeCurrent.nodeName
Next nodeCurrent
MsgBox Tiger
Run Code Online (Sandbox Code Playgroud)