自分方位研究所

日々の活動記録

起動済みのWEBページ(IE)をつかまえる。

記事が前後してしまいますが、起動済みのIEページをつかまえるマクロを作成しました。以前投稿した記事にやり方はすでに書いていますが、今後作成していくマクロ群として組み込めるよう、プロシージャを分けて、パーツ化するようにしています。

起動済みのIEをつかまえる手順は、「三流君」ことKen3さんのVBAコードが分かりやすいです。前回同様、参考にさせてもらっています。

www.mypath-as-variant.com

 

 以下のコードで、プロシージャ「Sub TEST_GetIEpage()」を実行すると、
先ず、ターゲットページのページタイトルと、URLを指定して、プロシージャ「GetIEpage」を呼び出しています。
ページを特定するのはURLだけでいいのでは?という考えもありますが、指定方法に幅を持たせるということで入れています。

「GetIEpage」 の動きを自分用にメモしておきます。

Set objIEandEXPL = CreateObject("Shell.Application")

ここで、すでに起動しているWindowsシェルをまとめています。
この「objIEandEXPL」には、起動中のIEページ群と、ファイル管理のエクスプローラーが含まれています。

If TypeName(objWindow.document) = "HTMLDocument" Then

各Windowのタイプを確認しています。

IEページなら、HTMLDocument
エクスプローラーなら、IShellFolderViewDual3

となりますのでIEページ をつかまえるため、タイプがHTMLDocumentのものを捜します。

HTMLDocument を見つけたら、部分一致で、ページタイトルと、URLを確認します。

それでOKなら、そのWindowを 変数objIEにセットします。

今回の例では、ページを見つけた/見つからない のメッセージボックスを表示させて終わりにしていますが、

MsgBox "IEページが見つかりました。", vbInformation, "ページ発見"

の代わりに、  objIE.document.all(0).innerHTML で、ソースコードを取得することができます。

debug.print で出力すると、ソースの前半が消えてしまいますので、全部を取得するには、外部テキストに吐き出してやる必要があります。

先日紹介しました外部への吐き出しマクロ 「PrintData2」を使用して、

PrintData2  objIE.document.all(0).innerHTML

とすれば、ソースコードをテキストファイルに出力することができます。

www.mypath-as-variant.com

 

========================================

Sub TEST_GetIEpage()

Dim pageTitle As String   'ページタイトル(の一部)
Dim pageURL As String     'URL(の一部)
Dim objIE As Object
'***************************************************
    pageTitle = "はてなブログ"
    pageURL = "blog.hatena.ne"
'***************************************************

    Call GetIEpage(pageTitle, pageURL, objIE)

    If objIE Is Nothing Then
        MsgBox "IEページが見つかりません。", vbExclamation, "ページ無し"
    Else
        MsgBox "IEページが見つかりました。", vbInformation, "ページ発見"
    End If

End Sub

'========================================

Sub GetIEpage(pageTitle As String, pageURL As String, objIE As Object)

'特定WEBページのオブジェクトを取得

'pageTitle  : ターゲットウェブページのタイトル(の一部分)
'pageURL    : ターゲットウェブページのURL(の一部分)
'objIE      : ターゲットウェブページのオブジェクト化

    Set objIE = Nothing

Dim objIEandEXPL As Object    '起動しているIEとエクスプローラーをオブジェクト化
    Set objIEandEXPL = CreateObject("Shell.Application")

Dim objWindow As Object 'objIEandEXPLのうちの一つのウインドゥ
    For Each objWindow In objIEandEXPL.Windows
        If TypeName(objWindow.document) = "HTMLDocument" Then
            If InStr(objWindow.document.Title, pageTitle) > 0 Then 'タイトル確認
                If InStr(objWindow.document.Url, pageURL) > 0 Then 'URL確認
                    Set objIE = objWindow   '代入する
                    Exit For
                End If
            End If
        End If
    Next objWindow
    Set objIEandEXPL = Nothing
        
End Sub