运行时错误 91。未设置对象变量或块变量
Posted
技术标签:
【中文标题】运行时错误 91。未设置对象变量或块变量【英文标题】:Runtime Error 91. Object variable or with block variable not set 【发布时间】:2015-12-17 21:50:45 【问题描述】:如果你能帮助我解决这个持续性错误,那就太棒了。我正在尝试从 IE 上的网站上抓取表格并将其插入到二维数组中。
代码如下:
Dim matrix(25, 7) As Variant
Set doc = ie.Document
Set Tbl = doc.getElementsByTagName("td").Item(6)
matrix(0, 1) = Tbl.innerText
Set Tbl = doc.getElementsByTagName("td").Item(7)
matrix(0, 2) = Tbl.innerText
Set Tbl = doc.getElementsByTagName("td").Item(20)
matrix(0, 3) = Tbl.innerText [Error Points to this line]
我曾多次尝试进行故障排除。没运气。它一直有效,直到 item 达到 12--item(12)。我到底错了或错过了什么?这只是代码的一部分。还有更多,但由于错误发生在这组的最后一行,因此没有进一步进行。谢谢。
例如,我知道它应该可以工作,并且 (20) 有数据,因为这个测试循环运行良好。
将一个整数变暗
a = 0
在
消息框(一)
q = ie.Document.getElementsByTagName("td").Item(a).innerText
消息框 (q)
a = a + 1
循环
当 a = 20 时,Msgbox 显示网页表格上的地址。
【问题讨论】:
也许doc.getElementsByTagName("td").Item(20)
即Tbl
是Nothing
?
感谢@OlivierJacot-Descombes 的输入。 (20) 确实有数据。实际上,该列表一直到 (202)。我已经完成了 debug_print 和 msg_box 直到 (202) 并且它工作正常。
我在从网页抓取数据时遇到了此类问题(缺少预期数据)。在某些情况下,我可以“等待”并且没关系,在其他情况下,我不得不重新发出抓取。在请求之后,我使用“DoEvents”循环,直到 ReadyState = 4。接下来,如果长度 = 0,我放弃。我在内容中搜索一个我知道在我需要的所有数据之后应该存在的字符串,如果没有找到,我重新发出请求。我还使用了计时器延迟,如果我设置为 5 秒,页面似乎总是有效。如果我花 1 秒时间,大约 85% 的时间都可以工作。
@WayneG.Dunn,谢谢。我有一种感觉,这也可能是一个等待问题。实施您的想法后会告诉您它是否有效。
@WayneG.Dunn。它在我在第六行之后发布了一个 Access Msg_box 之后起作用。我会给你指出一个直接的解决方法。但这仍然不是解决方案。必须点击 Msg_box 意味着它不是完全自动化,自动化是我的目标。
【参考方案1】:
这里有一些代码可以修改为你想等多久就等多久。来自http://www.exceltrick.com/formulas_macros/vba-wait-and-sleep-functions/
Option Compare Database
Option Explicit
#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
#Else
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
#End If
Sub SleepTest()
'MsgBox "Execution is started"
Sleep 1000 'delay in milliseconds (1000 = 1 second)
'MsgBox "Execution Resumed"
End Sub
【讨论】:
感谢帮助,即使我最终可能不会使用它。 :)以上是关于运行时错误 91。未设置对象变量或块变量的主要内容,如果未能解决你的问题,请参考以下文章