【问题标题】:vba can not find opening IE 11 Browser.vba 找不到打开 IE 11 浏览器。
【发布时间】:2015-10-27 00:16:42
【问题描述】:

我有一个 vba 代码,可以将数据从 Excel 表上传到网站。但是,该代码在 Win7 系统和 IE 浏览器 8 中运行良好,但在 Win8 IE 浏览器 11 上无法运行。 以下是部分代码:

   Dim objIE As SHDocVw.InternetExplorer
    Dim htmlDoc As MSHTML.HTMLDocument
    Dim htmlFrame As MSHTML.HTMLFrameElement
    Dim frame As HTMLIFrame
    Dim htmlElement As HTMLDTElement
    Dim myDoc As Object


    Set curSheet = ActiveWorkbook.ActiveSheet
    Set oShApp = CreateObject("Shell.Application")

    For Each oWin In oShApp.Windows

    If oWin.Name = "Windows Internet Explorer" Then
        Set IE = oWin
        Exit For
    End If

Next

If IE Is Nothing Then
    MsgBox ("Please sign into Avocado, then re-run this macro")
    Set IE = New InternetExplorerMedium
    IE.Visible = True
    IE.navigate "https://www.google.com"
    Exit Sub
End If

Sheets("Prepare").Select
fPathName = Cells(5, 5)
Call MakeFolders(fPathName)
Call MakeFolders2(fPathName)
Call MakeFolders3(fPathName)
'fFileName = fPathName & "\*.xls"
fFileName = Dir(fPathName & "\*.xls")

进入语句后代码循环运行:“If IE Is Nothing Then” 即使打开了google站点,程序仍然不断提示出msgBox,并一次又一次地重新打开网站,并且从未执行到最后一部分“Sheets(“Prepare”).Select”。我很困惑,因为它在 IE 8 浏览器中完美运行。我想知道IE11和IE8在vba IE功能方面是否有任何区别。 请查看它并给我一些想法,非常感谢您的帮助。非常感谢你。

【问题讨论】:

    标签: vba excel internet-explorer internet-explorer-11


    【解决方案1】:

    我遇到了同样的问题,发现 shell.application 的窗口名称在 IE 11 中发生了变化。早期版本的名称为“Windows Internet Explorer”,但 IE 11 仅使用“Internet Explorer”

    如果您相应地更改您的 if 条件,它将再次起作用...

    【讨论】:

    • 非常感谢您的帮助。该宏在 IE11 中再次起作用,但如果 excel 是 2010 版,则 ie.document.getElementById 函数将导致“需要对象错误”。你知道有什么办法可以解决吗?
    【解决方案2】:

    我认为您使用的是旧版本的 Internet Explorer。使用我在下面提供的代码,看看它是否有效。请确保您已将以下引用添加到您的项目中:

    • Microsoft HTML 对象库
    • Microsoft Internet 控件。

    如果您不确定如何添加对代码的引用,请查看此链接。External References

    Sub Test()
    
        Dim objIE As InternetExplorer
        Dim htmlDoc As HTMLDocument
        Dim htmlFrame As HTMLFrameElement
        Dim frame As HTMLIFrame
        Dim htmlElement As HTMLDTElement
        Dim myDoc As Object
        Dim curSheet As Worksheet
    
    
        ' Set the variables
        Set curSheet = ActiveWorkbook.ActiveSheet
        Set objIE = New InternetExplorer
    
        ' Make the browser visible and navigate
        With objIE
            .Visible = True
            .navigate "https://www.google.com"
        End With
    
        WaitForInternetToLoad objIE
    
    
        Sheets("Prepare").Select
        fPathName = Cells(5, 5).Value
        Call MakeFolders(fPathName)
        Call MakeFolders2(fPathName)
        Call MakeFolders3(fPathName)
        'fFileName = fPathName & "\*.xls"
        fFileName = Dir(fPathName & "\*.xls")
    
    
    End Sub
    
    Sub WaitForInternetToLoad(ByRef ie As InternetExplorer)
        Do
            dovents
        Loop While Not ie.readyState = READYSTATE_COMPLETE
    End Sub
    

    额外信息。

    您好,我看到您遇到了一些麻烦,我想提供帮助。

    让我们从您在代码中使用两个外部库的事实开始;并且您应该为它们设置引用以使代码正常工作。看我的照片,我用黄色突出显示了图书馆。

    有什么区别:

    微软互联网控制

    是负责互联网对象的人。它创建一个 Internet Explorer 应用程序并导航到某些链接。一旦完成导航到 url,“internet object”就会有一个“document”。这个对象不能做任何其他事情。

    Microsoft HTML 对象库

    这个库负责处理 Html 文档。正如您可能猜到的那样,您会将前一个对象(Internet Explorer)中的“document”分配给一个 HTML 文档变量,然后您可以进行进一步的操作。

    【讨论】:

    • 非常感谢您的帮助。您提供的代码可以执行到 call 函数,但是,它会在其余代码中出错。这是一个包含多个模块的项目。我是否必须将代码中的每个“ie”都更改为“objIE”?
    • 很难判断其他模块,但所有 objIE 都应声明为“Dim objIE As InternetExplorer” 还要确保如果您要导航到页面,则使用我在代码中使用的方式和每次导航后总是调用过程“waitForInternetToLoad”
    • 非常感谢您的帮助。您提供的代码可以执行到 call 函数,但是,它会在其余代码中出错。这是一个包含多个模块的项目。我是否必须将代码中的每个“ie”都更改为“objIE”?而像“'If oWin.Name = "Windows Internet Explorer" Then 'Set IE = oWin" 这样的声明都需要删除。所以我想知道,对于 Internet Explorer 11,它的名称是否与 Internet Explorer 8 不同?恐怕这些更改会影响程序的其他部分。
    • 我不确定有什么区别。您也可以删除该条件;请记住,有些人拥有旧版本的 Internet Explorer,代码现在可能适用于他们。
    • 您好,很抱歉再次打扰您,但是在我更改代码后,函数:objIE.document.getElementById("RLPM_TYPE").Value = 2 不起作用,错误消息是error' 424'“需要对象”。由于getElementById函数是内置的,所以我想知道IE11中这个函数是否还有其他名称?谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 2016-04-20
    • 2012-06-25
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    相关资源
    最近更新 更多