VBA Internet Explorer Automation 'Permission Denied'

后端 未结 8 1264
别那么骄傲
别那么骄傲 2020-12-19 23:11
Dim IE as New InternetExplorer
IE.Visible = True

IE.Navigate(\"http://www.google.com\")

Do Until IE.Busy = False
Loop

IE.document.getElementsByTagName(\"Input\")(         


        
相关标签:
8条回答
  • 2020-12-19 23:40

    I had the same Run time error 70. Permission denied when automating a Webbrowser control in VBA under MS Access 2010. My objective was to set innerHTML for a Content Editable node. Initially, it worked perfectly and then for an unknown reason, I started getting "Error 70. Permission Denied." Interestingly, this error seems to come from the IE Web Browser control and not from MS Access. At times, it was not trapped by the VBA error handler, On Error. Another puzzle is that when single stepping through the code, it would work, but when running normally, the Webbrowser control would just not function, but not raise an error. However, it would raise an error if I set a break point and then queried the WebBrowser in the immediate pane on VBA with code such as: ? DIV.innerHTML

    Here is the code that failed:

    Private Function SetInnerHTML(HTML As String) As String
    Dim HTMLEmail As HTMLDocument
    Dim DIV As HTMLDivElement
    Set HTMLEmail = Me.Email_MainBrowser.Controls("MyBrowser").Object.Document
    Set DIV = HTMLEmail.getElementById("MyText")
    DIV.innerHTML = HTML ' This is the line that failed
    

    Like Dennis, the OP, I tried adding in Sleep calls and added in function calls to make sure the Browser returned "Ready State" CurrentState = Me.Form("Email_MainBrowser").Controls("MyBrowser").ReadyState (CurrentState should be acComplete).

    Here are the things I tried which did not solve the problem: 1) Decompile and recompile the MS Access application. 2) Add calls to Win32 sleep function to wait for the WebBrowser control 3) Queried the Webbrowser to make sure it was in a Navigation Complete state.

    And here is what fixed it: Added "DoEvents" liberally around the code referencing and automating the webbrowser control:

    Dim HTMLEmail As HTMLDocument
    Dim DIV As HTMLDivElement
    DoEvents
    Set HTMLEmail = Me.Email_MainBrowser.Controls("MyBrowser").Object.Document
    Set DIV = HTMLEmail.getElementById("MyText")
    DoEvents
    DIV.innerHTML = HTML
    DoEvents
    

    I have not worked out the minimum number of DoEvents needed; it is probably just one strategically placed. I also still check to make sure the webbrowser control is in the Natigation complete state, but I'm sure this is a bug deep in the Webbrowser control. One that will probably never be fixed.

    0 讨论(0)
  • 2020-12-19 23:45

    Try this code for me. This bypasses the need to select/click any element in the browser.

    I tested this for INDIA

    Sub Sample1() '<~~ Works as expected
        Dim IE As New InternetExplorer
        IE.Visible = True
        IE.Navigate ("http://www.google.co.in/#hl=en&q=" & "Search Term")
    End Sub
    

    For UK

    Sub Sample2() '<~~ Works as expected
        Dim IE As New InternetExplorer
        IE.Visible = True
        IE.Navigate ("http://www.google.co.uk/#hl=en&q=" & "Search Term")
    End Sub
    

    Try this for US (Couldn't Test It as it redirects my request)

    Sub Sample3()
        Dim IE As New InternetExplorer
        IE.Visible = True
        IE.Navigate ("http://www.google.com/#hl=en&q=" & "Search Term")
    End Sub
    
    0 讨论(0)
  • 2020-12-19 23:50

    The following worked for me. I haven't tested it extensively, but the problem hasn't recurred. I was getting the error intermittently, but always at same point.

    Control of the first IE instance seems to die. However, another instance can be created by referencing the first. The dead instance can then be closed, and we carry on.

    Set IEa = CreateObject("InternetExplorer.Application")
    Set IEa = IE
       'Where IE is the instance that's about to error
    SendKeys ("%{F4}")
       'Closes the old window, IE.quit in the code wouldn't work
    IEa.Visible = True
    

    Hope this works for someone else, I was getting pretty frustrated.

    Brian

    PS: My first post on stackoverflow, I think I did the formatting right

    0 讨论(0)
  • 2020-12-19 23:55

    I am receiving the same error when automating IE, but instead of fixing, I worked around.

      Label1:
             If myIe Is Nothing Then
                 Set myIe = CreateObject("InternetExplorer.Application") 
             End If
    
             myIe.Navigate URL:=imdbLink
    
        For Each link In myIe.document.Links
             If Right(link.href, 9) = "/keywords" And Left(link.href, 26) = "http://www.imdb.com/title/" Then
                        mKPlot = link.href 'ERROR GENERATES FROM THIS, SOMETIMES...
             End If
        next link
    
    
    
    errHandler:
        If Err.Number = 70 Then
            Debug.Print "permission denied for: |" & title & "|"
    
            myIe.Quit
            Set myIe = Nothing
    
            Application.Wait Now + TimeValue("00:00:10")
    
            Resume Label1:
    
        End If
    

    Not the sleek registry-fix you were imagining, but it works for me.

    0 讨论(0)
  • 2020-12-19 23:56

    This is a common issue with Internet Explorer automation in VBA. It generally seems to happen after a new page has been loaded. I have had success using a combination of DoEvents, Application.Wait, and setting my HTMLDocument object to Nothing after a new page load.

    I have posed sample code below to demonstrate:

    Option Explicit
    
    Sub IEAutomation()
    
        Dim IE As InternetExplorer
        Dim html As HTMLDocument
        Dim i As HTMLHtmlElement
        Dim search_bar_id As String
        Dim submit_button_name As String
        Dim search_term As String
    
        'Define Variables
        search_bar_id = "lst-ib"
        submit_button_name = "btnK"
        search_term = "Learning VBA"
    
        'Create IE and Naviagate to Google
        Set IE = CreateObject("InternetExplorer.Application") 'Late Binding
        IE.Visible = True
        IE.navigate "http://www.google.com"
    
        'Wait for IE To Load
        Do While IE.readyState <> READYSTATE_COMPLETE: DoEvents: Loop
    
        'Create HTMLDocument Object
        Set html = IE.document
    
        'Enter Search Term into Search Bar and Click Submit Button
        html.getElementById(search_bar_id).innerText = search_term
        Application.Wait Now + TimeValue("0:00:01")
        html.getElementsByName(submit_button_name)(, 1).Click
    
        'Wait for New Page to Load (** DoEvents Helps with the Permission Issue **)
        Do While IE.readyState <> READYSTATE_COMPLETE: DoEvents: Loop
    
        'After Page Loads, Reset HTMLDocument Object and Wait 1 Second Before Recreating It
        Set html = Nothing
        Application.Wait Now + TimeValue("0:00:01") '<<< This seems to really help
        Set html = IE.document
    
        'Print All Elements In H3 Tags to Immediate Window in VBE
        For Each i In html.getElementsByTagName("H3")
            Debug.Print i.innerText
        Next i
    
    End Sub
    
    0 讨论(0)
  • 2020-12-19 23:56

    I was having this exact same problem. Had a script for automating IE that had been working fine for a year. Then out of the blue I started receiving this "permission denied error". I did two things, one of which fixed the problem, but I don't know which one.

    1. I removed the reference to "Microsoft Internet Controls", attempted to compile the project, added the reference to "Internet Controls" back in, and compiled the project.

    2. Removed the 'WithEvents' keyword when declaring the InternetExplorer object since I did not need to capture events events from IE anyway.

    I suspect it was the first and that somehow the reference became corrupted and removing at and re-adding it fixed the problem.

    0 讨论(0)
提交回复
热议问题