現在開かれているブラウザのURLを全て取得したいのですが、アドレスバー非表示のブラウザのURLが取得できません。
CreateObject("Shell.Application")以外で、既存のブラウザのURLを全て取得する方法はないでしょうか?
OS:Windows7
開発:Access2010
ブラウザ:IE8
Dim objShell As Object
Dim objIE As Object
Dim n As Integer
Set objShell = CreateObject("Shell.Application")
'objShell.Windows.Countでアドレスバー非表示のブラウザだと0が帰ってきます。
For n = objShell.Windows.Count To 1 Step -1
Set objIE = objShell.Windows(n - 1)
If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then
Do While objIE.Busy = True
DoEvents
Loop
Debug.Print objIE.Document.URL
End If
Next
Set objIE = Nothing
Set objShell = Nothing
アドレスバー非表示のウィンドウが一つでもあるとobjShell.Windows.Countが0を返す、という事なのでしょうか?
状況がよくわからないのですが、objShell.Windows.Countの値が怪しい事はあるっぽいですね(再現できませんでしたが)。
For Eachを使ったらどうでしょうか?
Dim objShell As Object Dim objIE As Object Set objShell = CreateObject("Shell.Application") For Each objIE In objShell.Windows If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then Do While objIE.Busy = True DoEvents Loop Debug.Print objIE.Document.URL End If Next Set objIE = Nothing Set objShell = Nothing
コメント(3件)
>アドレスバー非表示のウィンドウが一つでもあるとobjShell.Windows.Countが0を返す、という事なのでしょうか?
アドレスバー非表示のウィンドウがカウントの対象になっていません。
Ex, googleトップページ・アドレスバー非表示のウィンドウの場合
objShell.Windows.Count = 1
とかえってきます。
For Each でURLの取得を行いましたが、結果は同じでした。
また、アドレスバー非表示のウィンドウのみ取得できないと思っていたのですが、右クリック→「新しいウィンドウで開く」で開いたウィンドウのURLも取得できませんでした。
Ex, googleトップページ・「新しいウィンドウで開く」で開いたウィンドウ
の2画面を開いている場合
objShell.Windows.Count = 1
とかえってきます。
Document.URLはGooglのURLのみ取得でき、別ウィンドウのURLは取得できませんでした。
実は私の環境はWindowsXp、Excel2007、IE8で、これだとアドレスバー非表示でも新しいウィンドウ、新しいタブいずれでもすべて取得できました。Winodows7固有の問題ですかね?
その通りです。
別環境で行ったところ全てのURLを取得できました。
環境:WindowsXp、Office2010、IE8
やはり、Windows7に問題がありそうです。
現在、Microsoftに問合せ中です。
原因が解り次第報告致します。