自分方位研究所

日々の活動記録

VBAでIE (Internet Explorer)の起動有無と、目的URLのページが開かれているかを確認する。

先日、はてなブログのアクセス解析を調べる。という記事を投稿して定期的に記録していくには自動化しなくてはなぁ・・・という感じで締めくくりましたが、実際にやろうとするとなかなかうまくはいかないです。

日常のネット閲覧はChromeを使っているので、まだIEで制御やってるの?という感じがするのですが、とりあえずできる範囲でやっていきます。

自分が今までやってきたIEの制御は、先にIEを起動し、目的のURLを開いておいた上でマクロを実行、そのページをつかまえて操作するというものでした。

そのため、作成してから随分と日にちの経過したマクロを、なんの準備も無く実行すると、「ページが見つかりません」という、自分が用意したメッセージボックスが 表示されます。「これって何をするマクロだったっけ?ページって・・・」

ということの繰り返しだったため、目的のページを開いていなくても継続できるようにしようと考えてみました。

動作手順としては

  1. IEが起動しているか確認。
  2. IEが起動していなければ起動する。
  3. 起動しているIEに目的のページがあるか確認する。
  4. 目的のページがなければ、新しくタブを開き目的のページを表示する。

 先ず、1番目の 「IEが起動しているか確認」するコードを作成しました。

 起動中のIEのURLを探す部分(For Each ~ Next 部分)については、いつもお世話になっています三流君ken3さんのコードを参考にさせて頂いております。

ken3memo.hatenablog.com

Sub FindURL()
 
'IEの起動有無と、目的URLのページが開かれているかを確認する。
    
Dim TGTpageURL As String    '表示したいURL
TGTpageURL = "https://hatenablog.com/"

Dim getURLflag As Boolean  'URL発見フラグ (発見したら True )
getURLflag = False

Dim objWindow As Object 'For Eachループで使用するオブジェクト
    
Dim objShell As Object  'シェルオブジェクト
Set objShell = CreateObject("Shell.Application")    'シェルオブジェクトを作成

Dim objIE As Object  '捕まえたIEページ
Set objIE = Nothing  '初期化

For Each objWindow In objShell.Windows
    If TypeName(objWindow.document) = "HTMLDocument" Then
        Set objIE = objWindow
        If objWindow.document.Url = TGTpageURL Then
            getURLflag = True
            Exit For
        End If
    End If
Next

Set objShell = Nothing

Dim MSG As String
    MSG = "目的ページのURL: " & TGTpageURL & vbCrLf
Dim Title As String
    Title = "処理終了しました"

If objIE Is Nothing Then
    MSG = MSG & "IEは起動していません。" & vbCrLf
Else
    MSG = MSG & "IEは起動しています。" & vbCrLf
    If getURLflag = True Then
        MSG = MSG & "目的のページは開いています。" & vbCrLf
    Else
        MSG = MSG & "しかし、目的のページが見つかりません。" & vbCrLf
    End If
End If
    
MsgBox MSG, vbOKOnly, Title

End Sub

この処理では、IEが起動しているか、目的のURLが開いているかだけを確認しています。

この処理のメインは、For Each ~ Next 部分で、後半は結果表示のメッセージボックスのためのコードになっています。

 

ここで目的のURLを見つけたら、当初の目的は達成ですが、IEが開いていなかったり、IEが開いていても、目的のURLが見つからなければ、さらに処理を続けます。

ということで以下、明日に続きます。