-->

VBA Internet Explorer的自动化“权限被拒绝”(VBA Internet Expl

2019-06-25 08:38发布

Dim IE as New InternetExplorer
IE.Visible = True

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

Do Until IE.Busy = False
Loop

IE.document.getElementsByTagName("Input")(3).Value = "Search Term"

IE.document.Forms(0).Submit     <------ This line results in error.

该错误提示运行时错误70:“权限被拒绝”

请不要建议密码的改变。 有什么不对的代码。 这个宏适用于9出的10台电脑。 这不是一个时机的问题(我仍然得到,即使我通过手动步骤错误)。 我知道还有其他方法来声明Internet Explorer对象。 我一直在使用CreateObject和所有的东西尝试。 这一切都不重要。 以管理员身份运行也没有帮助。

这只是问题的一个简单的例子(我们实际上是在自动化要复杂的多任务)。 所以,请不要问“你为什么想要做一个goodle搜索?” 请不要问“你有什么做的”。 我需要这个问题就迎刃而解了。 我不需要我的代码重新编写的。

我们使用的是Windows XP,Internet Explorer 7中,和Office 2003中有什么东西导致随机的人不能够自动的Internet Explorer。 这不是一个用户的问题,而是一个计算机的问题。 我的意思是罪魁祸首电脑没有人可以自动化无论在哪个用户登录,但同一用户可以使用不同的电脑,一切都很好。 因此,它可能是一个注册在本地机器或类似的东西上设置。 所有的计算机都在这里设立了同样的方式,同样规格,同样的软件。

我用Google搜索和Google搜索和Google搜索和Google搜索。 不幸的是运行时错误70似乎是全部渔获物和大量的用户报告错误的不同的症状。 在我来说,我还没有找到一个解决办法,否则我就不会问在这里。

我们可以解决这个问题的唯一办法是把它完全重新加载硬盘驱动器上的所有内容。 一个干净的更新,包括操作系统。 这需要照顾的问题,但它也迫使用户重新设置他们的机器达到他们以前的方式,并重新安装所有的软件和一切。 这不是一个很好的解决方案。 还有就是机器造成这样或刷新不会有效果上设置的地方。 我想知道的设置是什么(我的感觉是这是一个注册表设置)。

任何帮助表示赞赏,感谢。

Answer 1:

测试所有上述建议的修复,甚至更后,我肯定这是一个奇怪的缺陷与IE调用子进程的Eventhandling每当有一个网站不同的安全区域。

切入正题,这里是解决方案:

'Craziest workaround ever due to bugged IE Eventhandling
Do While IE.ReadyState = 4: DoEvents: Loop 
Do Until IE.ReadyState = 4: DoEvents: Loop

每次添加此代码块导航到新页面或其他事件可能导致网站重装,像点击提交按钮或类似的之后。

以上丹建议从优添加的DoEvents语句在你的代码,它没有100%做的伎俩我。 相反,我建议加上上面的代码等。无论适用。

荣誉丹,没有你们的评论我以前从来没有想通了!

这种方法比其他建议的修复带来的好处的简短摘要:

  • 你能坚持到后期绑定,如果你希望(DIM IE为对象)
  • 你能坚持创建InternetExplorer对象(而不是即InternetExplorerMedium)
  • 你并不需要改变IE的安全区域设置
  • 在您的应用程序没有不必要的等待时间
  • 你摆脱错误70 - 拒绝权限
  • 你摆脱迷路会议即“运行时错误‘-2147417848(80010108)’:自动化错误调用已经与其客户端断开连接的对象。”
  • 你摆脱界面的问题,即“运行时错误‘-2147023179(800706b5)’:自动化错误接口未知”

所有的东西, 你不同意这种做法NEED摘要:

  • InternetExplorerMedium对象
  • 一般早期绑定
  • 参考Microsoft Internet控制
  • 参考微软壳牌控制和自动化
  • 奇怪的错误处理
  • 无需不断检查IE.Busy在你的代码
  • Application.wait或睡眠造成不必要的延误guesstimated

我只包括上述总结,因为我已经看到了所有这些解决方法建议,并亲自与没有运气尝试过为止。

基于OP的问题示例代码:

Dim IE as Object    
Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True
IE.Navigate("http://www.google.com")

'Craziest workaround ever due to bugged IE Eventhandling
Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop

IE.document.getElementsByTagName("Input")(3).Value = "Search Term"
IE.document.Forms(0).Submit     ' this previously crashed

我真的希望这将帮助其他人的未来。 一帆风顺大家谁用拼凑的解决方案一起帮助。

顺祝商祺帕特里克



Answer 2:

我自动化IE时收到同样的错误,但不是固定的,我工作围绕。

  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

不圆滑的注册表修复你想象,但它为我工作。



Answer 3:

我在此完全相同的问题。 有自动化IE已被工作一年罚款的脚本。 接着出来的是蓝色的,我开始收到这个拒绝“权限错误”。 我做了两两件事,其中之一的解决了这一问题,但我不知道是哪一个。

  1. 我删除了对“Microsoft Internet控制”,试图编译项目,增加了对“互联网控制”放回,并编译了该项目。

  2. 声明InternetExplorer对象,因为我并不需要捕捉从IE事件事件反正当删除了“WITHEVENTS”关键字。

我怀疑它是第一个,不知怎的参考变得损坏和拆除和重新添加它解决了这一问题。



Answer 4:

以下为我工作。 我没有测试它广泛,但问题一直没有复发。 我间歇性地收到错误,但总是在同样的观点。

第一IE实例的控制似乎死。 然而,另一个实例可以通过参考第一创建。 然后死者实例可以被关闭,我们继续。

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

希望这个作品给别人,我变得非常沮丧。

布赖恩

PS:我的计算器上的第一篇文章,我觉得我做了正确的格式



Answer 5:

试试这个代码我。 这绕过了需要选择/单击浏览器中的任何元素。

我测试了这个印度

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

对于英国

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

试试这个美国(不能测试它,因为它重定向我的要求)

Sub Sample3()
    Dim IE As New InternetExplorer
    IE.Visible = True
    IE.Navigate ("http://www.google.com/#hl=en&q=" & "Search Term")
End Sub


Answer 6:

我有同样的运行时错误70.许可自动在MS Access 2010中我的目标在VBA WebBrowser控件时是设置innerHTML的一个内容编辑节点拒绝。 最初,它的工作完美,然后一个未知的原因,我开始“错误70权限被拒绝。” 有趣的是,这个错误似乎来自从MS Access IE的Web浏览器控件,而不是。 有时,它不是由VBA错误处理程序被困,上的错误。 另一个让人不解的是,当单步执行代码,它的工作,但正常运行时,WebBrowser控件将只是没有发挥作用,但不会引发错误。 但是,如果我设置一个断点,然后用代码查询在不久的窗格中的web浏览器上的VBA比如它会引发错误: DIV.innerHTML

这里是一个失败的码:

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

丹尼斯一样的OP,我尝试添加在睡眠电话和在功能上添加调用,以确保浏览器返回“准备就绪状态” CurrentState = Me.Form(“Email_MainBrowser”)控制(“MyBrowser”)。readyState的(CurrentState应acComplete)。

下面是我尝试过的事情并没有解决这个问题:1)反编译和重新编译MS Access应用程序。 2)添加到Win32的睡眠功能呼叫等待WebBrowser控件3)质疑的Webbrowser,以确保它是在一个完整的导航状态。

这里是什么固定它:新增“的DoEvents”宽松周围的代码引用和自动化WebBrowser控件:

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

我还没有制定出必要的DoEvents的最小数目; 它可能只是一个战略地位。 我也还是检查,以确保WebBrowser控件是在Natigation完整的状态,但我敢肯定,这是深藏在WebBrowser控件中的错误。 一个可能永远不会被固定。



Answer 7:

这是在VBA Internet Explorer的自动化的共同课题。 它通常似乎是一个新的页面加载后发生。 我一直在使用的DoEvents,Application.Wait的组合取得了成功,一个新的页面加载后设置我的HTMLDocument的对象为Nothing。

我提出下面的示例代码来演示:

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


Answer 8:

重置HTMLDocument的对象的解决方案的工作对我来说即

'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

其他解决方案都没有解决我的问题。



文章来源: VBA Internet Explorer Automation 'Permission Denied'