VBA代码与已经打开的特定IE窗口进行交互

时间:2014-02-17 19:38:23

标签: internet-explorer vba excel-vba excel

我无法找到如何让excel VBA与已经打开的特定IE窗口进行交互。

这是我的过程:

我打开IE浏览器,导航到网站,输入我的用户名和pw,点击登录。打开一个新的IE窗口,我用它来输入会员号码并搜索会员信息。

我正在尝试创建一个VBA脚本,它将与我成功登录后打开的IE窗口进行交互(开始自动化一些更平凡的任务)。我在网上看过很多关于如何让VBA打开一个新的IE窗口,然后与之交互的教程。但是,我真的很难找到有关如何选择特定的已打开的IE窗口并与之交互的信息。

我已经尝试过这个快速测试,看看我是否可以选择正确的IE窗口作为我可以与之交互的对象。

Sub getIE()
Dim sh As Object, oWin As Object, IE As Object

Set sh = CreateObject("Shell.Application")

For Each oWin In sh.Windows
    If TypeName(oWin.document) = "HTMLDocument" Then
        Set IE = oWin
        Exit For
    End If
Next

MsgBox IE.document.URL

End Sub

出现消息框并显示初始IE窗口的URL,但我不知道如何让它选择我通常用于实际获取成员信息的IE窗口。

几年前,当我在学校时,我参加了几个技术课程,但是因为我已经屈服了任何技术肌肉,所以已经有一段时间了。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:13)

这是我使用的。它计算IE的打开实例的数量,然后逐步执行每个实例并确定网页的URL和标题。然后,您可以将标题或网址与您要查找的标题或网址进行比较。以下示例使用“赞”功能比较标题,但就像我说的,如果您愿意,可以比较网址。此外,如果您正在寻找不会改变的标题或网址,您可以使用“=”而不是“赞”。

marker = 0
Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For x = 0 To (IE_count - 1)
    On Error Resume Next    ' sometimes more web pages are counted than are open
    my_url = objShell.Windows(x).Document.Location
    my_title = objShell.Windows(x).Document.Title

    If my_title Like "XYZ" & "*" Then 'compare to find if the desired web page is already open
        Set ie = objShell.Windows(x)
        marker = 1
        Exit For
    Else
    End If
Next

If marker = 0 then
    msgbox("A matching webpage was NOT found")
Else
    msgbox("A matching webpage was found")
End If

答案 1 :(得分:2)

以上代码对我来说效果很好。我把它变成了一个函数调用,如下所示

Set ieFindUser = FindIEObject("Find and List Users")            'Find handle for popup window.

功能

Public Function FindIEObject(target As String) As InternetExplorerMedium
    Set objShell = CreateObject("Shell.Application")
    IE_count = objShell.Windows.Count
    For x = 0 To (IE_count - 1)
        On Error Resume Next    ' sometimes more web pages are counted than are open
        my_url = objShell.Windows(x).Document.Location
        my_title = objShell.Windows(x).Document.Title
        If my_title = target Then 'compare to find if the desired web page is already open
            Set FindIEObject = objShell.Windows(x)
            Exit For
        End If
    Next
End Function