IE (Internet Explorer)の制御において、一番最初の操作である、目的ページを捕まえるコードを作成しました。
繰り返し使う処理については、別プロシージャとして切り出しています。
- Sub GetObjIE()
- Sub FindURL(objIE, TGTpageURL, getPage)
- 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()
Dim TGTpageURL As String
TGTpageURL = "https://hatenablog.com/"
Dim objIE As Object
Set objIE = Nothing
Dim getPage As Boolean
getPage = False
Call FindURL(objIE, TGTpageURL, getPage)
If objIE Is Nothing Then
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
Call IE_WAIT(objIE)
Call FindURL(objIE, TGTpageURL, getPage)
End If
If getPage = False Then
objIE.Navigate2 TGTpageURL, 2048
Sleep 3000
Call FindURL(objIE, TGTpageURL, getPage)
End If
MsgBox "目的URL取得完了!→objIE 【" & getPage & "】" & vbCrLf & _
"URL: " & objIE.document.Url
End Sub
Sub FindURL(objIE, TGTpageURL, getPage)
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
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)
は、使いませんでした。最初から全シェルを一つずつ確認する方式を選んでいます。
数日間かけて、ようやく目的ページのオブジェクト化までたどり着きました。
しかし、実際の作業はこれからです。はてなブログの管理ページ。アクセス解析の内容を取り出して、日々まとめていくというもの。まだまだ先は長いです。