2013-09-25 95 views
1

我一直试图通过Excel 2010在VBA中创建一个快速子例程,以便通过bit.ly自动放置一个URL列表并将缩写链接复制回原来的链接。但是我得到了一个错误70:Permission Denied运行时错误。我有几门课程,并且这很有效,但我对VBA并不十分熟悉,如果可能的话,可以在调试时使用一些帮助(这会有很大的帮助)。下面的代码:VBA错误70:权限在IE自动化过程中被拒绝

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 

的错误主要是扔在这条线的项目已经通过一个或多个迭代运行后:

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

如果可以提供任何具体的建议,以帮助我在这个驼背,我将不胜感激。谢谢!

+0

您可以给出Col B单元格值中的任何一个的示例,以便我们可以对其进行测试吗? –

+0

可能是使用可以尝试这样的..虽然IE.document.getelementsbyid(“shorten_url”)没什么 “做更多的检查,这里 的DoEvents 结束而 –

+0

B列中的任何值可以与任何网站链接被取代 - stackoverflow.com ,google.com等 – user2813578

回答

1

自动化Internet Explorer应该始终是最后的手段,它很慢并且依赖于页面结构保持不变。它总是更好的选择的API(如果可用),在这种情况下bitly为shotening链接提供了一个API,你只需要得到您的身份验证令牌,并在下面输入:

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 

然后可以使用以上作为工作表中的函数

+0

这看起来相对优雅和简单。只有我不确定如何去查找/合并我的身份验证令牌。此外,这是一个将为许多用户分发的宏。有没有一种方法可以让程序确定身份验证令牌(我认为其他机器上的每个用户会有所不同) – user2813578

+0

我怀疑您的错误是由于以下事实造成的:比较限制了给定请求的数量时间段来防止这种网页的刮擦。对于API,一旦你成功了,你可以在这里获得你的API密钥:https://bitly.com/a/your_api_key。您需要查看使用限制并查看您是否可以使用它们。我想你可以为你的所有用户使用你的API密钥,但你最好找到另一种解决方案 – SWa