到目前为止,我有以下代码。我在以下行继续收到运行时错误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))并且我不确定为什么
答案 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
时拆分了另一部分。可能会发生在点击后元素不再存在的情况。