[[20091129091530]] 『VBAでieのアクティブなタブの情報を取得するには』(d_ue) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでieのアクティブなタブの情報を取得するには』(d_ue)

 いつも、参考にさせていただいています。
インターネットエクスプローラーのアクティブなタブについてだけ、urlを取得したいのですが、どうすればいいのでしょうか。

 開いているすべてのタブのurlを取得するのは、
[[20070425105449]]『開いているWEBページのURL、タイトルを取得したいです。』(カービー) 

にありました。

しかし、いくつも開いているタブのうち、選択している1つのタブだけurlを取得したい場合、どのようにすればよいのでしょうか?
よろしくお願いいたします。Excelは2002、OSは、windowsXPです。ieは8です。


 > Excelは2002です。OSは、windowsXPです。 

 IE のバージョンも書かれたほうがよろしいかと思います。

 (とおりすがり)


 標準モジュールに

 '==================================================================
 Option Explicit
 Private Declare Function GetForegroundWindow Lib "USER32" () As Long
 Dim ss
 Sub test()
    Dim ie As Object
    Dim hWnd As Long
    On Error Resume Next
    ss = 0
    Do While ss = 0
       hWnd = GetForegroundWindow
       Set ie = Chk_Active_ie(hWnd)
       If Err.Number <> 0 Then Exit Do
       If Not ie Is Nothing Then Exit Do
       DoEvents
    Loop
    If Not ie Is Nothing Then
       MsgBox ie.LocationURL
    End If
 End Sub
 '==============================================================================
 Function Chk_Active_ie(c_Hwnd As Long) As Variant
    Dim wn As Object
    Dim g0 As Long
    Set Chk_Active_ie = Nothing

    For Each wn In CreateObject("shell.application").Windows
       g0 = g0 + 1
       If wn.hWnd = c_Hwnd Then
          Set Chk_Active_ie = wn
          Exit For
       End If
    Next
    If Chk_Active_ie Is Nothing And g0 = 0 Then
       Chk_Active_ie = False
    End If
 End Function
 '===========================================================================
 Sub end_chk()
    ss = 1
 End Sub

 上記testを実行後、最初に選択したIEが表示しているURLをセルA1に書き込みます。

 尚、end_chkは、ループの停止用

 留意点 
 testを実行する前にひとつもIEが開いていないと、
 プログラムは直ちに終了してしまいます。

 こういうことですか?

 ichinose


ichinoseさん、ありがとうございます。

試してみると、現在アクティブになっているieのurlでなく、最初に立ち上げたieのurlがメッセージboxで表示されました。

やはり、難しいのでしょうか?


 >現在アクティブになっているieのurlでなく、最初に立ち上げたieのurlがメッセージboxで表示されました。
 ん?これは、サンプル的なコードです。

 確認するには、

 まず、対象となるIEをいくつか(三つでも四つでも・・)立ち上げて、それなりのサイトを表示させておきます。

 この状態でExcel上のマクロを「ツール」--「マクロ」--「マクロ」とクリックし、testを実行します。

 ですから、最初は、Excelがアクティブになっているはずです。

 ここから、すでに立ち上げてある適当なIEを選択するのです。
 すると、選択したIEのURLが表示されるはずです。

 このことから、GetForegroundWindowで得られるウインドーハンドルとそれぞれのIEのウインドーハンドル
 を比較することでアクティブなIEが取得できるというロジックです。

 後は、ご自分の仕様に合わせて監視ロジックを考えるのですよ!!

 ichinose


 恐らくご質問者のIEはヴァージョンが7.0以降(タブブラウザ)で、アクティブなタブのURLがほしいみたいです。

 (川野鮎太郎)


 >アクティブなタブのURLがほしいみたいです。
 そういうことでしたか!!
 だとしたら、環境がないので、他の方の投稿を待ってください

 ichinose


 ネット上を検索してみたら、以下のようなものがあったので応用できそうです。
http://app.m-cocolog.jp/t/typecast/221427/189040/59273927
 IE.StatusTextってので判断するようです。

 (川野鮎太郎)


いろいろとありがとうございます。
まだ解決できていませんが、がんばってみます。

(d-ue)


 ↑
 この書き込みは、最近のものなんですかね?

 じゃないとすると、何で今頃ここに上がって来たんでしょう。
 時々ある現象なんですが、どなたの仕業?

 トピ立て日から1ヶ月以上経過したレスは、
 書き込み日を入れると云うルールに出来ないもんでしょうか?
 (私は、活きている質問しか興味が涌かないので)

 (半平太) 2011/05/09 13:51

 >この書き込みは、最近のものなんですかね?
 いや、(d-ue) さんの書込は最近の物では無いハズです。

 差分で見た時に、その下に有った投稿が削除されていたので
 その下の投稿がいつなされたものだったのか分かりませんが。。。
 少なくとも、その投稿の削除で上がったのだと思います。

 (HANA)

 >その投稿の削除で上がったのだと思います。

 (投稿したかなんかした後で)削除だったんですか・・・ 納得出来ました。m(__)m

 (半平太) 2011/05/09 14:35

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.