自分方位研究所

日々の活動記録

VBAでIE (Internet Explorer)の特定URLのページを捕まえる。

 IE (Internet Explorer)の制御において、一番最初の操作である、目的ページを捕まえるコードを作成しました。

繰り返し使う処理については、別プロシージャとして切り出しています。

  • Sub GetObjIE() 'ターゲットwebページを取得(メイン処理)
  • Sub FindURL(objIE, TGTpageURL, getPage) 'IE(目的URL)を探す
  • Sub IE_WAIT(objIE As Object) 'ページが開くまで待機

以下のマクロを実行する前に 、処理したいURLを書き込んでおきます。

TGTpageURL = "https://hatenablog.com/" '←★事前に入力しておく

実行すると、IEに目的のURLが存在するか確認し、IEが起動していなければ起動し、目的のURLを用意します。

本マクロの終了時点では 、指定したURLのページをObjIEオブジェクトにセットします。
もし、URLが間違っていたり、存在しないものだったときは

「404 Not Found。 お探しのページは見つかりませんでした。」 

というページが objIE にセットされることになります。

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub GetObjIE()   'ターゲットwebページを取得

'2021/3/3(水)

'(1)IEが起動しているか確認。
'(2)IEが起動していればターゲットページがあるか確認。
'(3)ターゲットページが開いていれば、それをゲット。
'(4)IEが起動していなければ起動して、ターゲットページがあるか確認。
'(5)IEが起動しているが、ターゲットページが開いていなければ、
'   新しくタブを開き、ターゲットページを表示する。
'--------------------------------------------------
Dim TGTpageURL As String    '表示したいURL
    TGTpageURL = "https://hatenablog.com/" '←★事前に入力しておく
'--------------------------------------------------
Dim objIE As Object  '捕まえたIEページ
    Set objIE = Nothing  '初期化
    
Dim getPage As Boolean  'URL発見フラグ
    getPage = False
    
    Call FindURL(objIE, TGTpageURL, getPage)    'IE(目的URL)を探す
    
    If objIE Is Nothing Then    'IEが起動していないときIE起動
        Set objIE = CreateObject("InternetExplorer.Application")
        objIE.Visible = True
        Call IE_WAIT(objIE) 'IEの起動待ち
        Call FindURL(objIE, TGTpageURL, getPage)    'IE(目的URL)を探す
    End If
    
    If getPage = False Then '目的URL無しのとき
        objIE.Navigate2 TGTpageURL, 2048    '目的URLを別タブで開く
        Sleep 3000  '3秒待つ(新規タブが開くまで)
        Call FindURL(objIE, TGTpageURL, getPage)    'IE(目的URL)を探す
    End If
    
    MsgBox "目的URL取得完了!→objIE 【" & getPage & "】" & vbCrLf & _
           "URL: " & objIE.document.Url
    
    
End Sub

'◆========================================

Sub FindURL(objIE, TGTpageURL, getPage) 'IE(目的URL)を探す

Dim objShell As Object
Dim objWindow As Object

Set objShell = CreateObject("Shell.Application")

For Each objWindow In objShell.Windows
    If TypeName(objWindow.document) = "HTMLDocument" Then
        Set objIE = objWindow
        If objWindow.document.Url = TGTpageURL Then
            getPage = True  '目的のURLを見つけた
            Exit For
        End If
    End If
Next

Set objShell = Nothing

End Sub

'◆========================================

Sub IE_WAIT(objIE As Object)    'ページが開くまで待機

Do While objIE.ReadyState <> 4 Or objIE.Busy = True
    DoEvents
Loop

End Sub

IEが起動していないときは、IEを起動させますが、そのとき、指定URLまで一気に開くのではなく、起動したIEに、目的のURLが存在するか確認し、存在していれば、そのタブを利用します。

起動済みのIEに目的のURLページが存在しないときは、タブを新しく追加し、そのタブをオブジェクト化するのに

Set objIE2 = objShell.Windows(objShell.Windows.Count - 1)

は、使いませんでした。最初から全シェルを一つずつ確認する方式を選んでいます。

数日間かけて、ようやく目的ページのオブジェクト化までたどり着きました。

しかし、実際の作業はこれからです。はてなブログの管理ページ。アクセス解析の内容を取り出して、日々まとめていくというもの。まだまだ先は長いです。