VBA默认命名空间错误

我正在尝试实例化Dom文档的根节点。 不过,我将它命名为xbrl ,这个名称是在默认的命名空间xmlns="http://www.xbrl.org/2003/instance"

根据之前的回答,MSXML在涉及默认命名空间时是buggy(barrowc的答案) 。 所以我不得不对我的代码做一些修改。 这些在哪里

 objXMLDoc.LoadXML (objXMLHTTP.responseText) 

取而代之

 objXMLDoc.LoadXML objXMLHTTP.responseText objXMLDoc.setProperty "SelectionNamespaces", "xmlns:r='http://www.xbrl.org/2003/instance'" 

并且

 Dim objXMLHTTP As New MSXML2.XMLHTTP Dim objXMLDoc As New MSXML2.DOMDocument 

取而代之

 Dim objXMLHTTP As New MSXML2.XMLHTTP60 Dim objXMLDoc As New MSXML2.DOMDocument60 

数字60代表6.0版本

所以当我做了这些修改macros工作没有错误。 但现在它只有时有效。 当它不给我一个

Run-time error -2147467259(80004005)':

Reference to undeclared namespace prefix:'us-gaap.'

我不明白macros观崩溃的原因, 并认为这是一个错误。

你能帮我吗?

为了完整性 ,下面提交整个macros

 Sub READSITE() Dim IE As InternetExplorer Dim els, el, colDocLinks As New Collection Dim lnk, res Dim Ticker As String Dim colXMLPaths As New Collection Dim XMLElement As String Set IE = New InternetExplorer IE.Visible = False Ticker = Worksheets("Sheet1").Range("A1").Value LoadPage IE, "https://www.sec.gov/cgi-bin/browse-edgar?" & _ "action=getcompany&CIK=" & Ticker & "&type=10-Q" & _ "&dateb=&owner=exclude&count=20" Set els = IE.Document.getelementsbytagname("a") For Each el In els If Trim(el.innertext) = "Documents" Then colDocLinks.Add el.href End If Next el For Each lnk In colDocLinks LoadPage IE, CStr(lnk) For Each el In IE.Document.getelementsbytagname("a") If el.href Like "*[0-9].xml" Then Debug.Print el.innertext, el.href colXMLPaths.Add el.href End If Next el Next lnk XMLElement = Range("C1").Value 'For each link, open the URL and display the Debt Instrument Insterest Rate For Each lnk In colXMLPaths res = GetData(CStr(lnk), XMLElement) With Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) .NumberFormat = "@" .Value = Ticker .Offset(0, 1).Value = lnk .Offset(0, 2).Value = res End With Next lnk End Sub Function GetData(sURL As String, sXMLElement As String) Dim strXMLSite As String Dim objXMLHTTP As New MSXML2.XMLHTTP60 Dim objXMLDoc As New MSXML2.DOMDocument60 Dim objXMLNodexbrl As MSXML2.IXMLDOMNode Dim objXMLNodeElement As MSXML2.IXMLDOMNode Dim objXMLNodeStkhldEq As MSXML2.IXMLDOMNode GetData = "?" 'No data from XML objXMLHTTP.Open "GET", sURL, False '<<EDIT: GET the site objXMLHTTP.send objXMLDoc.LoadXML (objXMLHTTP.responseText) objXMLDoc.setProperty "SelectionNamespaces", "xmlns:r='http://www.xbrl.org/2003/instance'" Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("r:xbrl") Set objXMLNodeElement = objXMLNodexbrl.SelectSingleNode(sXMLElement) If Not objXMLNodeElement Is Nothing Then GetData = objXMLNodeElement.Text End If End Function Sub LoadPage(IE As Object, url As String) IE.Navigate url Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE DoEvents Loop End Sub 

这也是一个奇怪的和令人沮丧的笔记,看到如果我改变我的macros在修正前的状态根据 barrowc给我的修改我现在可以看到macros的作品!

我能够迅速终止错误,通过在Diff Checker中检查我以前的代码示例中的大量代码。 看来你需要的只是从这些行中删除60 (天知道为什么…)

 Dim objXMLHTTP As New MSXML2.XMLHTTP60 Dim objXMLDoc As New MSXML2.DOMDocument60