关于excel:VBA错误70:IE自动化期间权限被拒绝

VBA Error 70: Permission Denied during IE automation

我一直在尝试通过Excel 2010在VBA中创建一个快速子例程,以通过bit.ly自动放置URL列表,然后将缩写的链接复制回以替换其原始链接。但是我在过程中遇到错误70:权限被拒绝的运行时错误。我已经上过几门课程,并且大部分都可以使用,但是我对VBA并不十分熟悉,并且在可能的情况下可以使用一些帮助来调试它(这将是巨大的帮助)。这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Option Explicit

Dim IE As Object

Sub AutoAbbrev()

Set IE = CreateObject("InternetExplorer.Application")
Dim holdURL As String
Dim row_number As Integer
IE.Visible = True

For row_number = 101 To 112

holdURL =""

If Range("b" & row_number).Value ="" Then GoTo Skip

IE.navigate"http://www.bitly.com" 'load bit.ly

Do While IE.readyState <> 4
    DoEvents
Loop

IE.document.all("shorten_url").Value = Range("b" & row_number).Value
IE.document.all("shorten_btn").Click

Do While IE.document.all("shorten_url").Value = Range("b" & row_number).Value Or IE.document.all("shorten_url").Value =""
    DoEvents
Loop

holdURL = IE.document.all("shorten_url").Value
IE.document.all("shorten_url").Value =""
Range("b" & row_number).Value = holdURL

Skip:
Next row_number

End Sub

Private Sub Command1_Click()

AutoAbbrev
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set IE = Nothing
If TypeName(IE) <>"Nothing" Then Unload IE
Set IE2 = Nothing
If TypeName(IE2) <>"Nothing" Then Unload IE2

End Sub

该程序运行一次或多次迭代后,大部分会在此行引发错误:

1
2
3
Do While IE.document.all("shorten_url").Value = Range("b" & row_number).Value Or IE.document.all("shorten_url").Value =""
        DoEvents
    Loop

如果可以提供任何具体建议来帮助我度过难关,我将不胜感激。谢谢!


自动执行Internet Explorer应该永远是不得已的方法,它运行缓慢,并且依赖于页面结构保持不变。最好选择一个API(如果有的话),在这种情况下,请提供一个用于简化链接的API,您只需要获取身份验证令牌并在下面输入即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function Shorten(url As String) As String

    Const token As String ="YOUR AUTHENTICATION TOKEN"
    Static oRequest As Object

    If oRequest Is Nothing Then Set oRequest = CreateObject("winhttp.winhttprequest.5.1")

    With oRequest
        .Open"GET","https://api-ssl.bitly.com/v3/shorten?access_token=" & token &"&longUrl=" & url &"&format=xml", False
        .send
        If Left(Split(.responsetext,"txt>")(1), 2) ="OK" Then Shorten = Split(Split(.responsetext,"url>")(1),"<")(0)
    End With

End Function

然后您可以在工作表中将以上内容用作功能


我发现这是由于页面未完全加载而发生的。 IE速度很慢,但有时需要使用它,因为Divs中有动态内容,需要使用object.click事件打开它。做到不做appIE.Busy和appIE.ReadyState = 4:DoEvents:循环可以帮助您,但它也可以挂起您的浏览器,因此使用计时器添加等待时间可以有所帮助。