先日、はてなブログのアクセス解析を調べる。という記事を投稿して定期的に記録していくには自動化しなくてはなぁ・・・という感じで締めくくりましたが、実際にやろうとするとなかなかうまくはいかないです。
日常のネット閲覧はChromeを使っているので、まだIEで制御やってるの?という感じがするのですが、とりあえずできる範囲でやっていきます。
自分が今までやってきたIEの制御は、先にIEを起動し、目的のURLを開いておいた上でマクロを実行、そのページをつかまえて操作するというものでした。
そのため、作成してから随分と日にちの経過したマクロを、なんの準備も無く実行すると、「ページが見つかりません」という、自分が用意したメッセージボックスが 表示されます。「これって何をするマクロだったっけ?ページって・・・」
ということの繰り返しだったため、目的のページを開いていなくても継続できるようにしようと考えてみました。
動作手順としては
- IEが起動しているか確認。
- IEが起動していなければ起動する。
- 起動しているIEに目的のページがあるか確認する。
- 目的のページがなければ、新しくタブを開き目的のページを表示する。
先ず、1番目の 「IEが起動しているか確認」するコードを作成しました。
起動中のIEのURLを探す部分(For Each ~ Next 部分)については、いつもお世話になっています三流君ken3さんのコードを参考にさせて頂いております。
ken3memo.hatenablog.com
Sub FindURL()
Dim TGTpageURL As String
TGTpageURL = "https://hatenablog.com/"
Dim getURLflag As Boolean
getURLflag = False
Dim objWindow As Object
Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
Dim objIE As Object
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が見つからなければ、さらに処理を続けます。
ということで以下、明日に続きます。