EXCEL VBA InternetExplorerの操作(Webページ操作・監視・タイトル名取得・URL取得・ブックマーク)②
EXCEL VBA InternetExplorerの操作(Webページ操作・監視・タイトル名取得・URL取得・ブックマーク)②
今回は、前回の【EXCEL VBA を利用して、InternetExplorerを制御する方法】の続きとして、Webページの表示完了待ちと、InternetExplorerで表示したタイトル名・URLを取得する説明をいたします。EXCEL VBAを利用してInternetExplorerを制御するには、「参照設定」が必要になりますので、下記の参照ページにて事前に設定を行って下さい。
【参照ページ】
Webページの表示完了待ち(エラー防止)
下記のサンプルプログラムは、EXCEL VBA InternetExplorerの操作①では、説明していなかったWebページを表示する際に、発生する制御エラーを防止する方法の説明です。Webページを表示するには、各通信環境により、ページが表示するまでの待ち時間が異なります。VBAでは、ページの読み込み中はWebページに対する操作を行う事ができません。そのため、読み込みが完了するまで、VBAプログラムを待機(表示待ち)する必要があります。
【ReadyStateプロパティ】
●IEオブジェクト.readyState
(InternetExplorerの状態(表示)を0~4段階の数値で返します。)
定数 | 戻り値 | 内容(説明) |
---|---|---|
READYSTATE_UNINITIALIZED | 0 | デフォルトの初期化状態。 |
READYSTATE_LOADING | 1 | オブジェクトは現在そのプロパティをロードしています |
READYSTATE_LOADED | 2 | オブジェクトが初期化されました。 |
READYSTATE_INTERACTIVE | 3 | オブジェクトはインタラクティブですが、そのすべてのデータを利用できるわけではありません。 |
READYSTATE_COMPLETE | 4 | オブジェクトはすべてのデータを受信しました。※操作可能状態 |
●IEの操作可能状態は、4:READYSTATE_COMPLETE
【Busyプロパティ】
●IEオブジェクト.Busy
(InternetExplorerの状態(表示)を「True」か「False」で返します。
戻り値 | 説明(内容) |
---|---|
True | Webページの読み込み中(ビジー状態) |
False | Webページの読み込み完了(ビジー状態でない) |
●IEの操作可能状態は、「False」になってから可能
【IEオブジェクト.readyStateを利用した場合】①
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' '******** AKIRA55.COM ******* https://akira55.com/webpage02/ ' Sub InternetExplorer01() 'Webページの表示待ち(エラー防止) Dim IE As InternetExplorer Set IE = CreateObject("InternetExplorer.application") IE.Visible = True 'IEを開きます。(起動) IE.Navigate "www.akira55.com" '指定するURLを開きます。 Do While IE.ReadyState < READYSTATE_COMPLETE '指定したページが立ち上がるまで監視します。 DoEvents Loop MsgBox "指定したページが立ち上がりました。" End Sub ' |
【IEオブジェクト.Busyを利用した場合】②
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' '******** AKIRA55.COM ******* https://akira55.com/webpage02/ ' Sub InternetExplorer02() 'Webページの表示待ち(エラー防止) Dim IE As InternetExplorer Set IE = CreateObject("InternetExplorer.application") IE.Visible = True 'IEを開きます。(起動) IE.Navigate "www.akira55.com" '指定するURLを開きます。 Do While IE.Busy = True '指定したページが立ち上がるまで監視します。 DoEvents Loop MsgBox "指定したページが立ち上がりました。" End Sub ' ' |
【IEオブジェクト.readyStateとBusyを併用した場合】③
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' '******** AKIRA55.COM ******* https://akira55.com/webpage02/ ' Sub InternetExplorer03() 'Webページの表示待ち(エラー防止) Dim IE As InternetExplorer Set IE = CreateObject("InternetExplorer.application") IE.Visible = True 'IEを開きます。(起動) IE.Navigate "www.akira55.com" '指定するURLを開きます。 Do While IE.ReadyState < READYSTATE_COMPLETE Or IE.Busy = True '指定したページが立ち上がるまで監視します。 DoEvents Loop MsgBox "指定したページが立ち上がりました。" End Sub ' |
(画面クリックして拡大)
InternetExplorerの各タイトル名を取得します。メッセージボックスに一覧表示
下記のサンプルプログラムは、InternetExplorerで開いている各ページのタイトル名を取得して、メッセージボックスに一覧表示させるサンプルプログラムです。
【プログラム実行手順】
①InternetExplorer表示されているWebページの各タイトル名を取得する。
②Webページの各タイトルを纏める。
③各タイトルを纏めたデータをメッセージボックスで表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
' '******** AKIRA55.COM ******* https://akira55.com/webpage02/ ' Sub InternetExplorer05() 'IEの各タイトル名を取得します。 Dim Exp_Shell, Win_Shell, IE_temp As Object Dim IE_Title, ALL_Title As String Dim I As Long Set Exp_Shell = CreateObject("shell.application") '現在開いているIEページをExp_Shellへ収納します。 ALL_Title = "" '集計するタイトル名をクリアーします。 I = 1 ' For Each Win_Shell In Exp_Shell.Windows '開いているIEページを全て繰り返します。 IE_Title = "" '取得するIEタイトルをクリアーします。 On Error Resume Next 'タイトル名が取得できない場合のエラーを回避します。 IE_Title = Win_Shell.Document.Title '取得したタイトル名をIE_Titleへ代入します。 On Error GoTo 0 If IE_Title <> "" Then 'タイトル名を取得できたか確認します。 ALL_Title = ALL_Title + vbCrLf & I & "----" & IE_Title & vbCrLf 'タイトル名が取得できた場合は、ALL_Titleに I = I + 1 'タイトルの件数を加算(NO)します。 End If Next Win_Shell If ALL_Title <> "" Then MsgBox "【 IEの取得したタイトル名は以下の通りです。】" & vbCrLf & ALL_Title Else MsgBox "IEのタイトル名を取得できませんでした。" End If End Sub ' |
(画面クリックして拡大)
IEのタイトル名を取得して、EXCELシートにタイトル名とURL転記します。
下記のサンプルプログラムは、InternetExplorerで開いている各ページのタイトル名とURLを取得して、EXCELシートに一覧表示させるサンプルプログラムです。URLは、ハイパーリンクで転記しますので、後で開く際にダブルクリックすると選択したタイトルページを開く事が出来ます。複数のIEページを開いた時に、ブックマークをする時や一時的にURLを保管したい時に便利だと思います。
【プログラム実行手順】
①InternetExplorer表示されている全てのWebページの各タイトル名とURLを取得する。
②Webページの各タイトルとURLをEXCELシート「Web一覧」へ転記します。
③EXCELシートに、各タイトルとURL(ハイパーリンク)が表示されました。
【注意事項】
EXCEL転記先シート名を「Web一覧」に設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
' '******** AKIRA55.COM ******* https://akira55.com/webpage02/ ' Sub InternetExplorer06() 'IEのタイトル名を取得して、シートに転記します。 Dim Exp_Shell, Win_Shell, IE_temp As Object Dim Ws01 As Worksheet Dim IE_Title, IE_Url As String Dim I As Long Set Ws01 = Worksheets("Web一覧") '取得したタイトル名を転記するシート名を指定します。 Set Exp_Shell = CreateObject("shell.application") '現在開いているIEページをExp_Shellへ収納します。 I = 2 For Each Win_Shell In Exp_Shell.Windows '開いているIEページを全て繰り返します。 IE_Title = "" '取得するIEタイトルをクリアーします。 On Error Resume Next 'タイトル名が取得できない場合のエラーを回避します。 IE_Title = Win_Shell.Document.Title '取得したタイトル名をIE_Titleへ代入します。 IE_Url = Win_Shell.LocationURL '取得したURLをIE_URLへ代入します。 On Error GoTo 0 If IE_Title <> "" Then 'IEのタイトル名を取得したら「Web一覧」シートに転記します。 With Ws01 Cells(I, "A") = I - 1 '「Web一覧」シートのA列に【No】を代入します。 Cells(I, "B") = IE_Title '「Web一覧」シートのB列に【タイトル名】を代入します。 .Hyperlinks.Add anchor:=Range("C" & I), Address:=IE_Url '「Web一覧」シートのC列に【URL】を代入します。 End With I = I + 1 'No(ナンバー)を+1加算します。 End If Next Win_Shell End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。