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ウィンドウを選択する方法がわかりません。実際にメンバー情報を取得します。
私は数年前に学校に通っていたときにいくつかの技術クラスを受講しましたが、技術的な筋肉を曲げてからしばらく経ちました。どんな助けでも大歓迎です!
これが私が使っているものです。 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
上記のコードは私にとってはうまくいきました。次のように関数呼び出しに変換しました
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