VBA高度持久的运行时错误91 [英] VBA highly persisting run-time error 91

查看:85
本文介绍了VBA高度持久的运行时错误91的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到的问题是,当我尝试触发宏时,我经常遇到错误.

I am confronted by the problem that i am constantly getting an error when i try to fire my macro.

代码是

Sub MAGAZINE_iiii()

    Dim IE As InternetExplorer ' MODIFICATION
    Dim els, el, colDocLinks As New Collection
    Dim lnk
    Dim res
    Dim Ticker As String ' MODIFICATION
    Dim colXMLPaths As New Collection '<<<EDIT

    Set IE = New InternetExplorer 'MODIFICATION

    IE.Visible = True

    Ticker = Worksheets("Sheet1").Range("A1").Value 'MODIFICATION

    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  '<<<EDIT
            End If
        Next el
    Next lnk

    For Each lnk In colXMLPaths ' EVERY ITERATION MUST BE FOR AN INSTANCE DOCUMENTS TO PARSE INSIDE THE LOOP
        Dim objXMLHTTP As New MSXML2.XMLHTTP
        Dim objXMLDoc As New MSXML2.DOMDocument
        Dim objXMLNodexbrl As MSXML2.IXMLDOMNode
        Dim objXMLNodeDIIRSP As MSXML2.IXMLDOMNode

        objXMLHTTP.Open "POST", CStr(lnk), False  '<<EDIT: GET not POST
        objXMLHTTP.send
        objXMLDoc.LoadXML (objXMLHTTP.responseText)

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

        Worksheets("Sheet1").Range("D1").Value = objXMLNodeDIIRSP.Text
        Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
    Next lnk

End Sub

Sub LoadPage(IE As InternetExplorer, URL As String)
    IE.navigate URL
    Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
End Sub

,错误消息是:

运行时错误"91":

对象变量或未设置块变量

编译器在此行中断了程序

and the compiler breaks the procedure in this line

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

清楚地设置对象时怎么办?这段代码从这里起源,在这里工作得非常好!

How is this possible when the object is clearly set? This code originates from here where it works absolutely fine!

还激活了引用 Microsoft Internet Controls Microsoft HTML Object Library Microsoft XML v6.0 .

更新

完整回答的问题.请阅读两个答案.

推荐答案

xbrl 元素位于文档的默认命名空间中(通过 xmlns ="http://www定义.xbrl.org/2003/instance").MSXML2的默认名称空间存在问题.

The xbrl element is in the default namespace of the document (defined via xmlns="http://www.xbrl.org/2003/instance"). MSXML2 has issues with default namespaces.

尝试进行此更改:

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

Set objXMLNodexbrl = objXMLDoc.SelectSingleNode("r:xbrl")

还尝试将这两个声明更改为最新的MSXML2 v6.0对象:

Also try changing these two declarations to the up to date MSXML2 v6.0 objects:

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

这篇关于VBA高度持久的运行时错误91的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆