【发布时间】:2016-03-05 01:52:21
【问题描述】:
我收到以下 VBA 代码的各种错误(最近的错误是运行时错误“70”:权限被拒绝)。基本上,代码/工作表连接到客户的 Intranet IE 数据库,搜索客户活动并将任何活动导入工作表(最终将使用该活动进行报告)。这是我遇到错误的地方,具体取决于我搜索的时间长短我有时要提取多个页面的活动,这需要单击“下一步”按钮并从每个页面中提取数据,直到不再有“下一个” " 按钮(没有更多活动)。我设置的循环将从第一页拉出,单击“下一步”按钮,然后有时会从第二页拉出,但随后会出现错误。所以我认为错误与页面的加载有关,但我添加了暂停以允许加载但仍然遇到相同的错误。我真的被困在这个问题上,不幸的是,在我解决这个问题之前,我无法推进这个项目。
这里是sn-p的代码:
Dim TDelements As IHTMLElementCollection
Dim TDelement As HTMLTableCell
Dim r As Long, i As Long
Dim e As Object
Set TDelements = IE.document.getElementsByTagName("tr")
r = 0
For i = 1 To 1
Application.Wait Now + TimeValue("00:00:03")
For Each TDelement In TDelements
If TDelement.className = "searchActivityResultsContent" Then
Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText
r = r + 1
ElseIf TDelement.className = "searchActivityResultsContent" Then
Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText
r = r + 1
End If
Next
Application.Wait Now + TimeValue("00:00:02")
Set elems = IE.document.getElementsByTagName("input")
For Each e In elems
If e.Value = "Next Results" Then
e.Click
i = 0
Exit For
End If
Next e
Next i
Do Until Not IE.Busy And IE.readyState = 4
DoEvents
Loop
IE.Quit
End Sub
任何帮助/建议将不胜感激。谢谢!
【问题讨论】:
-
哪一行出现错误?使用IE, document and element state checks sequentially 而不是
Application.Wait。或者你可以试试to retrieve the data via XHR。 -
感谢您的回复,给出错误的行(大多数情况下)是“对于 TDelements 中的每个 TDelement”。至于您的建议,我尝试过使用 IE、文档和元素状态检查,但仍然遇到同样的问题……我将其切换到 application.wait 命令,因为加载活动页面有时需要几秒钟。抱歉,我绝不是 VBA 的专家,XHR 是什么?从这个意义上说,我该如何利用它?
-
你能分享你正在使用的 URL 吗?关于 XHR,请尝试按照我之前评论中链接的步骤操作。
-
抱歉,这是一个基于 Intranet Web 的程序,所以它只能在我的网络上使用。我明白你所说的关于 XHR 的内容......我不完全确定我是否能够访问 XML 文件,但这肯定是一个更简单的解决方案,所以我会试一试!跨度>
-
Dim所有变量为Variant,出现错误后,进入调试器,输入即时窗口? TypeName(TDelements)、? TDelements.length和? TypeName(TDelement)。你有什么输出?
标签: vba excel web-scraping