VBA EXCEL 错误 91 对象变量或未设置块变量

VBA EXCEL error 91 object variable or with block variable not set

您好,我遇到了一个奇怪的问题,我收到了错误 91 ("object variable or with block variable not set")。当我 运行 脚本时,我并不总是得到错误,只是偶尔(随机)。我已经尽力去做了,但没有成功。

我正在抓取一个网站以获取一些 PC 组件的最新价格。

为了做到这一点,我制作了一个脚本,并针对不同的部分依次多次调用该脚本。该错误与特定部分无关。我在所有部分随机得到错误。有时我可以毫无错误地完成所有调用。

脚本(不是完整的脚本,只有你需要的):

Sub ImportUrlData(url As String)

    Dim ie As InternetExplorer
    Dim html As HTMLDocument
    Dim varListingIDElement As IHTMLElement
    Dim varShopName As String
    varShopName = ""

    Set ie = New InternetExplorer
    ie.Visible = False
    ie.navigate url

    Do While ie.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Set html = ie.document

    Set varListingIDElement = html.getElementById("listing")
    varShopName = getXPathElement("/table/tbody/tr[1]/td[1]/p/a", varListingIDElement).innerText

我总是在最后一行收到错误:

varShopName = getXPathElement("/table/tbody/tr[" & count & "]/td[1]/p/a", varListingIDElement).innerText

(错误未发生在 'getXPathElement' 函数内部,因此也无需显示。如果您确实想看一下,请询问,我会 post在这里进行编辑。)

当我使用 F8 从头到尾调试时,我从来没有收到错误。有没有可能下一个电话在上一个电话还没有结束之前就已经开始了?

提前致谢!

(对不起,如果我监督了一些荷兰语的话。)

在某些情况下,如果对象 return 以任何方式不是'完全连接。很难确定是否是这种情况,我只在将对象设置为具有自己的初始化过程的对象时遇到过这种情况,并且此过程不受 VBA 常规。

对于您的问题,具体而言,您可以采取以下几种方法:

Set varListingIDElement = html.getElementById("listing")
If Not varListingIDEElement is Nothing Then
    varShopName = getXPathElement("/table/tbody/tr[1]/td[1]/p/a", varListingIDElement).innerText
End If

上述方法应该可以完全避免错误,但这也意味着可能未设置 varShopName。

另一方面:

Set varListingIDElement = html.getElementById("listing")

Application.Wait(Now + TimeValue("00:00:03"))

varShopName = getXPathElement("/table/tbody/tr[1]/td[1]/p/a", varListingIDElement).innerText

这将强制应用程序在变量的初始设置和变量的最终调用之间等待三秒钟。如果确实是先前流程在新流程开始之前未完成的问题,则可以使用此方法。您也可以将此方法与第一种方法结合使用,以充分利用两者。

祝你好运!