vba 找不到正在打开的 IE 11 浏览器。

vba can not find opening IE 11 Browser.

我有一个 vba 代码,可以将数据从 excel sheet 上传到网站。但是,该代码在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 功能方面是否有任何区别。 请查看它并给我一些想法,非常感谢您的帮助。非常感谢你。

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

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

如果您不确定如何将引用添加到您的代码,请查看此 link。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

额外信息。

您好,我看到您在这方面遇到了一些问题,我想提供帮助。

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

有什么区别:

Microsoft Internet 控件

是负责互联网对象的。它创建一个 Internet Explorer 应用程序并导航到某些 links。一旦完成导航到 url,“互联网对象”就会有一个“文档”。此对象无法执行任何其他操作。

微软HTML对象库

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

我 运行 遇到了相同的问题,发现 shell.application 的 window 名称在 IE 11 中已更改。早期版本的名称为 "Windows Internet Explorer",但 IE 11 仅使用 "Internet Explorer"

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