【チュートリアル】VBAでIE自動化ツールを作る(その2) IEで指定したページを表示

こんにちは、自動化エンジニアをしています。kozuです。

エクセルVBAによりWebページの要素(テキストボックス、ボタンなど)を操作したり、表示されている情報を取得する自動化ツールの開発方法を紹介します。実際のWebサイトを自動操作し情報を取得するマクロの開発を通して、自動化ツールの開発について学ぶことができます。

本連載では、チュートリアルということでVBAの開発手順から始め、IEの操作についてどのようなページでも共通で使用できるコード(共通部品)を作成します。最初に共通部品を作成しておくことで、自分でIEの自動化ツールを作成する際に少量の実装で効率よく開発できるようになります。

この章では、VBAでIEを起動し、指定したURLのページを表示するまでを実装します。

1.対象者

ブラウザで定期的に手作業で行っているデータ入力やデータ収集等の作業から開放されたい、楽したいと考えている方を対象に、エクセルVBAで自動化するツールの開発ができるようになることを目指しています。プログラミングの経験がない方でも、コードをコピーすれば開発できるようになっています。

2.開発環境

以下の環境を使用します。
バージョンは異なっていても問題ないと思います。
・OS:Windows10
・エクセル:Microsoft Excel2007
・ブラウザ:InternetExploer11

3.標準モジュールを追加する

モジュールとは、VBAでは1つのプログラム(部品)の単位になります。通常のプログラミング言語では1つのプロジェクトは複数のファイルから構成されていますが、VBAでは1つのマクロブックにプログラムのファイルが全て含まれているイメージです。
前回は最初から用意されていた「Sheet1」のモジュールに処理を実装しましたが、これはエクセルシートに紐付いているモジュールになります。今回は共通部品を作成するため、他のマクロでも使用しやすいようにシートに紐付かない標準モジュールに実装します。

VBEのプロジェクト(ファイルツリー)で右クリックし、「挿入」→「標準モジュール」をクリックしてください。ファイルツリーに「標準モジュール」のフォルダが作成され、その中に「Module1」が追加されます。

標準モジュール追加

標準モジュール追加2

そのままの名前だと何をするモジュールかわからないため、名前を変更しましょう。ファイルツリーの下に「プロパティ」エリアが表示されています。「(オブジェクト名)」の右側の「Module1」を「IEControl」に変更してください。変更するとファイルツリーに表示されていた名前も同時に変更されます。

標準モジュール追加3

4.参照追加

IEを操作するためにライブラリの参照を追加する必要があります。VBEの「ツール」→「参照設定」から以下のダイアログが表示されます。以下の2つを追加してください。スクロールを移動してチェックします。チェックをしたら「OK」ボタンをクリックしてください。
 ・Microsoft HTML Object Library
 ・Microsoft Internet Controls

画像4

5.IEを起動する

「IEControl」に以下のコードを追加してください。

' ************************************************
'  関数名:OpenUrl
'  概要:IEを起動し、指定したURLのページを表示する
'  引数:objIE(IEオブジェクト)
'       url(URL)
'       isDisplay (IE表示フラグ)
'       ieTop (表示位置Y座標)
'       ieLeft (表示位置X座標)
'       ieWidth (ウィンドウ幅)
'       ieHeight (ウィンドウ高さ)
'  戻り値:なし
' ************************************************
Public Sub OpenUrl(ByVal objIE As InternetExplorer, _
          ByVal url As String, _
          Optional isDisplay As Boolean = True, _
          Optional ieTop As Integer = 0, _
          Optional ieLeft As Integer = 0, _
          Optional ieWidth As Integer = 1000, _
          Optional ieHeight As Integer = 1200)
   
   With objIE
       'IEの表示/非表示設定
       .Visible = isDisplay
       
       'ウィンドウの位置とサイズ設定
       .Top = ieTop
       .Left = ieLeft
       .Width = ieWidth
       .Height = ieHeight
       
       '指定したURLのページを表示する
       .navigate url
   End With
   
   'IEが完全に表示されるまで待機
   Call WaitIE(objIE)
   
   '3秒待機する
   Wait (3000)
End Sub

' ************************************************
'  関数名:WaitIE
'  概要:IEが完全に表示されるまで待機
'  引数:objIE(IEオブジェクト)
'  戻り値:なし
' ************************************************
Private Sub WaitIE(ByVal objIE As InternetExplorer)
   'IEが完全に表示されるまで待機
   Do While objIE.Busy = True Or objIE.readyState <> 4
       DoEvents
   Loop
End Sub

' ************************************************
'  関数名:Wait
'  概要:指定時間待機
'  引数:待機時間(ms)
'  戻り値:なし
' ************************************************
Private Sub Wait(ByVal milisec As Long)
   Application.Wait [Now()] + milisec / 86400000
End Sub

' ************************************************
'  関数名:CloseIE
'  概要:IEを閉じる
'  引数:objIE(IEオブジェクト)
'  戻り値:なし
' ************************************************
Public Sub CloseIE(ByVal objIE As InternetExplorer)
   objIE.Quit
   Set objIE = Nothing
End Sub

次に、「IEControl」のプロシージャを呼び出す処理として「Sheet1」に以下のコードを追加してください。
※前回マクロ実行用に追加したコードは削除してください。

Sub IE自動操作()
   Dim objIE As New InternetExplorer
   
   Dim url As String
   url = "https://www.google.com/"
   
   'IEでURLのページを表示
   Call IEControl.OpenUrl(objIE, url)
   
   'IEを終了する
   Call IEControl.CloseIE(objIE)
End Sub

「IE自動操作」プロシージャ内にカーソルを移動し、「F5」キーで実行してください。IEが起動し、urlの変数に設定したURLのページが表示されることを確認してください。読み込みが終わり、画面が表示されたところでIEのウィンドウが閉じれば正しく動作しています。

6.処理の解説

まず最初に、InternetExplorerクラスのオブジェクトを生成しています。クラスにはプロパティやプロシージャを持っており、このオブジェクトに対してIEの設定を変更したり、ページの操作を行います。

Dim objIE As New InternetExplorer

「IEControl」に実装した「OpenUrl」を呼び出し、IEで指定したURLのページを表示します。「OpenUrl」ではIEの表示/非表示、ウィンドウ表示位置、サイズを設定し、指定したURLのページを表示します。最後にIEの状態を監視し完全に表示されるまで待機しています。呼び出し時に指定した引数の数が定義と一致していないですが、「Optional」がついている引数が指定されない場合は「=」の後に設定されたデフォルト値で実行されます。ウィンドウサイズを変えたい場合は、デフォルト値を変更するか呼び出し時に引数で指定してください。

'IEでURLのページを表示
Call IEControl.OpenUrl(objIE, url)

最後に「IEControl」の「CloseIE」を呼び出し、IEのオブジェクトを終了し「Nothing」を設定することでオブジェクトを破棄し後片付けを行います。

'IEを終了する
Call IEControl.CloseIE(objIE)


ここまででIEで指定したURLのページを表示することができました。次回は表示されたページの要素の調べ方について解説します。

この記事が気に入ったらサポートをしてみませんか?