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

时间:2015-10-27 00:16:42

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

我有一个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")

当进入语句时,代码在循环中运行:“如果IE是Nothing那么” 即使打开谷歌网站,该程序仍然会一直提示msgBox,并一次又一次地重新打开网站,它永远不会执行到最后一部分“表格(”准备“)。选择”。我很困惑,因为它在IE 8浏览器中运行良好。我想知道IE11和IE8在vba IE功能方面是否有任何区别。 请仔细阅读并给我一些想法,非常感谢您的帮助。非常感谢你。

2 个答案:

答案 0 :(得分:0)

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

  • Microsoft HTML对象库
  • Microsoft Internet Controls。

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

额外信息。

嗨,我发现你遇到了一些麻烦,我想伸出援手。

首先,您要在代码中使用两个外部库;并且您应该为它们设置引用以使代码正常工作。看我的图片我突出了库黄色。 Libraries References

有什么区别:

Microsoft Internet Controls

是照顾互联网对象的人。它创建了一个Internet Explorer应用程序,并导航到某些链接。一旦完成导航到网址然后"互联网对象"有一个" 文件"。此对象无法执行任何其他操作。

Microsoft HTML对象库

该库负责处理Html文档。正如您可能猜到的那样,您将分配" 文档"从上一个对象(Internet Explorer)到HTML文档变量,然后您可以进行进一步的操作。

答案 1 :(得分:0)

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

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