尝试使用VBA从UPS.com提取数据表时出现运行时错误

时间:2016-11-04 21:22:59

标签: vba

到目前为止,我有以下代码。我在以下行继续收到运行时错误91:

Range("B1").Value = upsClass(0).textContent

这是我到目前为止的完整代码。对此的任何帮助将不胜感激。

Sub extract()
Dim IE As InternetExplorer
Dim html As HTMLDocument

Set IE = New InternetExplorer
IE.Visible = False
IE.Navigate2 "https://www.ups.com/WebTracking/track?loc=en_US&WT.svl=PNRO_L1"

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Set html = IE.document
Set upsClass = html.getElementsByClassName("dataTable")

IE.document.all("trackNums").Value = ThisWorkbook.Sheets("Sheet1").Range("A1")
IE.document.all("track.x").Click

Range("B1").Value = upsClass(0).textContent

IE.Quit
Set IE = Nothing

End Sub

Cell A1包含一个包的跟踪号,我正在尝试获取货件进度表并将数据粘贴到B1中。

我现在得到运行时错误70权限在尝试时被拒绝?立即窗格中的TypeName(upsClass(0))并且我不确定为什么

1 个答案:

答案 0 :(得分:1)

你应该替换:

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

使用:

Do While IE.Busy and IE.ReadyState <> 4 then
    DoEvents
Loop

不仅在导航之后,而且在点击元素之后,必须使用此循环。

在此代码中:

Set html = IE.document
Set upsClass = html.getElementsByClassName("dataTable")

IE.document.all("trackNums").Value = ThisWorkbook.Sheets("Sheet1").Range("A1")
IE.document.all("track.x").Click

Range("B1").Value = upsClass(0).textContent

在所有情况下,您都可以将IE.document称为html。尽量不要使用GetElementsByClassName。我不能说我100%肯定,但这种方法在VBA中并不起作用,至少在我的环境中不起作用。您可以使用:

Dim htmlEle1 As IHTMLElement

For each htmlEle1 in html.getElementsByTagName("someTag")
    If htmlEle1.ClassName = "dataTable" then
        'do stuff, htmlEle1.textContent can be extracted
        Exit for 'only first item with this class is needed
    End IF
Next htmlEle1

此外,您在设置upsClass时拆分了部件,而在使用upsClass(0).textContent提取.click时拆分了另一部分。可能会发生在点击后元素不再存在的情况。