web-dev-qa-db-ja.com

すでに開いている特定のIEウィンドウ)と対話するためのVBAコード

ExcelVBAを特定のIEウィンドウが既に開いている)と対話させる方法を見つけるのに問題があります。

ここに私のプロセス:

IEを開き、Webサイトに移動し、ユーザー名とpwを入力して、[ログイン]をクリックします。新しいIEウィンドウが開き、メンバー番号の入力とメンバーシップ情報の検索に使用します。

ログインに成功した後に開くIEウィンドウ)と対話するVBAスクリプトを作成しようとしています(より日常的なタスクの自動化を開始するため)。たくさんのチュートリアルを見てきました。 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ウィンドウを選択する方法がわかりません。実際にメンバー情報を取得します。

私は数年前に学校に通っていたときにいくつかの技術クラスを受講しましたが、技術的な筋肉を曲げてからしばらく経ちました。どんな助けでも大歓迎です!

5
user1238528

これが私が使っているものです。 IEの開いているインスタンスの数をカウントし、各インスタンスをステップスルーして、WebページのURLとタイトルを決定します。次に、タイトルまたはURLを現在のタイトルまたはURLと比較できます。次の例では、「いいね」機能を使用してタイトルを比較していますが、前述のように、必要に応じてURLを比較できます。また、変更されないタイトルまたは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
13
ron

上記のコードは私にとってはうまくいきました。次のように関数呼び出しに変換しました

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
2
Steven Alpha