【问题标题】:Excel VBA force shutdown IEExcel VBA 强制关闭 IE
【发布时间】:2014-12-23 18:46:30
【问题描述】:

我目前正在使用以下子程序在自动化后关闭我的 IE:

Public Sub CloseIE()
    Dim Shell As Object
    Dim IE As Object

    Set Shell = CreateObject("Shell.Application")

    For Each IE In Shell.Windows
        If TypeName(IE.Document) = "HTMLDocument" Then
            IE.Quit
        End If
    Next
End Sub

这很好用,但是当我再次尝试运行 IE 代码时出现问题,我得到以下信息:

运行时错误'-2147023706 (800704a6)':

自动化错误

已安排系统关闭。

20 秒后,我可以重新运行代码。有什么方法可以“强制关闭”IE,这样我就可以在没有错误的情况下直接再次运行代码?

编辑:

这是启动 IE 的代码:

Sub testSub()

    Dim IE As Object, Doc As Object, strCode As String

    Set IE = CreateObject("internetexplorer.application")
    IE.Visible = True

      IE.Navigate "website name"

        Do While IE.ReadyState <> 4: DoEvents: Loop

        Set Doc = CreateObject("htmlfile")
        Set Doc = IE.Document 

       CODE HERE

       CloseIE

End Sub

【问题讨论】:

  • 也许您应该显示您在其中实例化 IE 并创建该对象的代码。这似乎是解决这个问题的更好地方。首先,将该对象分配给一个变量,然后使用该对象的.Quit 方法并将对象变量设置为Nothing。目前的方法并不理想。
  • 您应该在实例化后直接使用 IE 对象。这个问题归结于糟糕的设计。

标签: excel vba internet-explorer


【解决方案1】:

我使用了一个简单的过程来创建一个InternetExplorer 对象,导航,然后使用IE.QuitSet IE = Nothing 关闭它。

显然关闭后,互联网仍在后台运行了大约一分钟(我注意到它使用任务管理器,后台进程)。我进入 Internet Explorer 选项并取消单击“退出时删除浏览历史记录”。

这解决了我的问题。我不确定为什么 IE 需要这么长时间来清除历史记录,我不确定是否有解决方法,但它是迄今为止我唯一可行的选择。

【讨论】:

    【解决方案2】:

    修改你的main sub为QuitIE应用,然后设置object变量为Nothing

    Sub testSub()
    
        Dim IE As Object, Doc As Object, strCode As String
    
        Set IE = CreateObject("internetexplorer.application")
        IE.Visible = True
    
          IE.Navigate "website name"
    
            Do While IE.ReadyState <> 4: DoEvents: Loop
    
            Set Doc = CreateObject("htmlfile")
            Set Doc = IE.Document 
    
           '### CODE HERE
    
           IE.Quit
           Set IE = Nothing
    
    End Sub
    

    您将不再需要CloseIE 过程。

    【讨论】:

    • 谢谢,这有帮助,因为我认为它使我得到错误的时间减半,但我仍然得到错误。我想我知道为什么,因为我忘了提到我在 IE 中有两个选项卡要关闭,你的代码似乎只关闭了一个。你能告诉我如何关闭这两个标签吗?
    • IE 是应用程序对象,Quit 方法应该关闭整个应用程序,这不是您遇到的情况吗?
    • 它可以关闭 IE,但是当我尝试直接运行另一个 IE 时,我仍然收到错误
    • 是在:Set IE = CreateObject("internetexplorer.application")
    • 嗯。听起来它与关闭IE的方法无关,必须是其他原因导致错误。您是否尝试过使用谷歌搜索该错误消息?或者(它更复杂但可以避免 IE 错误)您可以使用 xmlhttprequest 而不是 IE。除非你需要使用IE...
    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多