アクティブになっているIEのタブを掴むコード 削除
Message#1 2015年2月4日(水)21時16分 From: アクティブ |
いつもお世話になっております。 アクティブになっているIEのタブを掴むコード作りました。 ユーザーフォームにマクロを登録したボタンを配置して使っています。 WIN32APIのFindWindow関数でアクティブなIEを掴み、 アクティブなIEのタブでないと、ステータスバーに 文字を入力できないことを利用してアクティブなタブを識別しています。 基本的にはちゃんと動くのですが、時折アクティブなタブではなく、 一番左にあるタブを補足してしまいます。 もしくはIEを補足できずNot Foundになります。 ハンドルは必ず取得できているので、問題があるとすれば コード内の★★★より下だと思います。 Not Foundになるのは(1)の部分でどのタブの ステータスバーにも文字が代入されないことが原因でした。 一番左のタブを掴んでしまうときも、(1)の部分で アクティブなタブではなく、一番左のタブの ステータスバーに文字が入ってしまい、 それを掴んでいるようです。 タブが複数あるIEのウィンドウを複数立ち上げていることが多いのですが、 タブの開き方の問題なのか(特定の開き方をするとステータスバーを読まない?)、 原因が分かりかねている状況です。 ステータスバー云々はあんまり信頼性が高く無さそうな気がするのですが、 これ以外に何か確実にタブを掴む方法があればご教授ください。 もしくはこのコードを改良する方法があれば教えていただけると助かります。 よろしくお願いいたします。 WIN7 IE9 エクセル2010 Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Sub IEfind() Dim ie As Object Dim hwnd As long hwnd = FindWindow("IEFrame", vbNullString) For Each ie In CreateObject("Shell.Application").Windows() If hwnd = ie.hwnd Then ’★★★ If ie.StatusBar = False Then ie.StatusBar = True ie.statusText = CStr(hwnd)’---(1) If ie.statusText = CStr(hwnd) Then Exit For End If Next If IsEmpty(ie) Then MsgBox "Not Found" Else MsgBox ie.LocationURL ’若しくは他の処理 End If End Sub |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。