2013-09-25 2 views
1

VBA에서 Excel 2010을 통해 빠른 서브 루틴을 만들었으므로 bit.ly를 통해 URL 목록을 자동화하고 단축 링크를 다시 원래 링크로 복사합니다. 하지만 오류가 발생했습니다 70 : 사용 권한이 거부되었습니다. 나는 약간의 코스를 가졌고 이것은 대개는 잘 작동하지만 VBA에 익숙하지 않아 가능하다면 디버깅에 도움이 될 수 있습니다 (거대한 도움이 될 것입니다). 이 고비를 통해 나를 도와VBA 오류 70 : IE 자동화 중 사용 권한이 거부되었습니다.

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

어떤 구체적인 조언을 제공 할 수 있다면 :

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 

오류는 대부분 프로그램이 하나 이상의 반복을 통해 실행 후이 줄에 발생합니다 : 여기 코드는 , 나는 그것을 크게 감사 할 것이다. 감사!

+0

Col B 셀 값 중 하나의 예제를 제공하여 테스트 할 수 있습니까? –

+0

다음과 같이 시도해도 좋습니다. IE.document.getelementsbyid ("shorten_url") nothing nothing DoEvents end –

+0

b 열의 값이 웹 링크로 대체 될 수 있습니다. , google.com 등 – user2813578

답변

1

Internet Explorer를 자동화하는 것은 항상 최후의 수단이어야합니다. 속도가 느리고 페이지 구조가 변경되지 않은 채로 유지됩니다.

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 

그런 다음 사용할 수 있습니다 : 그것은 bitly, 당신은 당신의 인증 토큰을 얻고 아래에 입력 할 필요가 링크를 shotening에 대한 API를 제공하는 하나를 사용할 수있는 경우이 경우, API을 선택하는 것이 좋습니다 위의 내용을 워크 시트의 기능으로 사용하십시오.

+0

비교적 우아하고 단순 해 보입니다. 인증 토큰을 찾거나 통합하는 방법에 대해 확신 할 수는 없습니다. 또한, 많은 사용자에게 배포 될 매크로입니다. 프로그램이 인증 토큰을 결정하도록하는 방법이 있습니까? (다른 컴퓨터의 각 사용자마다 다를 것이라고 생각하십니까?) – user2813578

+0

귀하의 오류는 bitly 주어진 요청의 수를 제한한다는 사실에 기인합니다. 이러한 종류의 웹 스크래핑을 방지하기 위해 API의 경우, 일단 전화를 받으면 API 키 (https://bitly.com/a/your_api_key)를 가져올 수 있습니다. 사용 제한을 살펴보고 함께 작업 할 수 있는지 확인해야합니다. 모든 사용자에게 API 키를 사용할 수 있다고 가정하지만 다른 솔루션을 찾는 것이 더 나을 것입니다. – SWa

관련 문제