1. まとめトップ

エクセルVBAでIE(Internet Explorer)を操作する時に役に立つプロシージャまとめ

初心者向けでエクセルVBAを使ったIE(Internet Explorer)を操作する際に役に立つプロシージャを紹介しています。基本、ココを押さえておけば、IE操作を簡単に行うことができます。

更新日: 2015年10月08日

27 お気に入り 143366 view
お気に入り追加

参考サイト

■目次

1.エクセルVBAの参照設定を行う
2.型宣言と有効範囲を設定する
―――――――――――――――――――――――
【基本編】
3.指定したURLをIE(Internet Explorer)で開く
4.指定したURLを開いているIEで表示させる
5.指定のタグをクリックする
6.指定のタグにキーワードがあるかチェックする
7.指定したリンクをクリックする(ウィンドウの種類選択可)
―――――――――――――――――――――――
【フォーム編】
8.フォームのテキストボックス・テキストエリアに値を入力する
9.フォームのチェックボックス・ラジオボタンをクリックする
10.フォームのセレクトボックスを選択する
11.フォームを送信する
―――――――――――――――――――――――
12.javaScriptを実行する
13.IEをスクロールさせる
14.IE操作に関するモジュール(プロシージャ一式)
―――――――――――――――――――――――
【応用編】
15.画像をクリックする
16.画像ボタンをクリックする
17.フレームを操作する
18.リンクを新しいウィンドウで開いて操作する
19.リンクを新しいタブで開いて操作する
20.IEのウィンドウをフルスクリーン状態にする
21.画面を印刷する
22.画像ファイルをダウンロード(保存)する
23.IEのクッキーを削除する
24.ブラウザの情報を取得する
25.ページのタイトルを取得する

1.エクセルVBAの参照設定を行う

エクセルVBAでIEを操作するためには、以下のライブラリが必要となります。

●Microsoft HTML Object Library
●Microsoft Internet Controls

【設定方法】
VBAのコード編集画面の「メニュー」→「ツール」→「参照設定」を選択して、
●Microsoft HTML Object Library
●Microsoft Internet Controls
にチェックを入れてください。

2.型宣言と有効範囲を設定する

IE操作で利用するオブジェクトなどの型宣言と有効範囲を設定します。
モジュールの一番上に記載してください。

今回は任意の時間だけプログラムを待機させるWindows APIの「Sleep」を利用します。
office2010で64ビット版を利用している方は、書き方がことなるので、IF文で分岐させています。

----------------------------------------------------------------------------------------
Public objIE As InternetExplorer
Public objTag As Object
Public objOption As Object

#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
----------------------------------------------------------------------------------------

―――――――――――――――――――――――――――――――

【基本編】

3.指定したURLをIE(Internet Explorer)で開く

エクセルVBAでIEをする操作する基本中の基本部分です。

'********************************************************
'プロシージャ名:ieView
'プロシージャの説明:IE表示
'引数:objIE = 対象のIEオブジェクト
' :urlName = 表示するURL
' :viewFlg = 表示・非表示
' :ieTop = ブラウザのTOP位置
' :ieLeft = ブラウザのLEFT位置
' :ieWidth = ブラウザの幅
' :ieHeight = ブラウザの高さ
'********************************************************
Sub ieView(objIE As InternetExplorer, urlName As String, Optional viewFlg As Boolean = True, Optional ieTop As Integer = 0, Optional ieLeft As Integer = 0, Optional ieWidth As Integer = 600, Optional ieHeight As Integer = 600)

Set objIE = CreateObject("InternetExplorer.Application")

objIE.Visible = viewFlg

objIE.Top = ieTop
objIE.Left = ieLeft
objIE.Width = ieWidth
objIE.Height = ieHeight

objIE.Navigate urlName

Call ieCheck(objIE)

End Sub

【解説】
------------------------------------------------------------------------------------
引数は7つです。
「objIE」「urlName」は必須項目です。
「viewFlg 」「ieTop 」「ieLeft 」「ieWidth 」「ieHeight 」は省略可項目です。
Optionalを付けた宣言した引数は、Functionプロシージャを呼び出す際に省略できます。
ただし、Optionalを付けた引数以降の引数にもすべてOptionalを付けなければなりません。

-------------------------------------------------------------------------------------
Set objIE = CreateObject("InternetExplorer.Application")
-------------------------------------------------------------------------------------
IEオブジェクトを作成します。
オブジェクト型で宣言したオブジェクト変数に、オブジェクトを格納するときは、Setを使わなければなりません。

-------------------------------------------------------------------------------------
objIE.Visible = viewFlg 'IEを表示するか、非表示にするか

objIE.Top = ieTop 'IEのTOP位置
objIE.Left = ieLeft 'IEのLEFT位置
objIE.Width = ieWidth 'IEの幅
objIE.Height = ieHeight 'IEの高さ
-------------------------------------------------------------------------------------
IEオブジェクトのプロパティを設定します。
IEを裏で処理し、表示させたくない場合はviewFlgを「false」に設定してください。
IEの位置については、RightやBottomなどはないのでご注意ください。

-------------------------------------------------------------------------------------
objIE.Navigate urlName
-------------------------------------------------------------------------------------
指定したURLのサイトを開きます。

-------------------------------------------------------------------------------------
Call ieCheck(objIE)
-------------------------------------------------------------------------------------
ieCheckは別のプロシージャでIEを完全に表示するまでチェックするプロシージャです。
完全に表示しないまま処理を進めていくとデータを取得できない場合などがあります。

'********************************************************
'プロシージャ名:ieCheck
'プロシージャの説明:IEが完全表示されまでループする
'引数:objIE = 対象のIEオブジェクト
'********************************************************
Sub ieCheck(objIE As InternetExplorer)

Dim timeout As Date

timeout = Now + TimeSerial(0, 0, 10)

Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop

timeout = Now + TimeSerial(0, 0, 10)

Do Until objIE.document.ReadyState = "complete"
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop

End Sub

【解説】
------------------------------------------------------------------------------------
引数は1つです。
「objIE」は必須項目です。
IEを2つ指定している場合などは、セットしたobjIE1,objIE2など引数を入力してください。

-------------------------------------------------------------------------------------
Dim timeout As Date

timeout = Now + TimeSerial(0, 0, 10)
-------------------------------------------------------------------------------------
timeoutは処理から10秒後にループから抜け出せない場合に、IEを更新させるためのタイムアウト時間です。
IE操作はPC環境に左右され、IEが固まる場合があります。
データ収集する場合は長時間起動しっぱなしなので、途中で処理が固まるのを防止するための処置です。

-------------------------------------------------------------------------------------
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop

timeout = Now + TimeSerial(0, 0, 10)

Do Until objIE.document.ReadyState = "complete"
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop
-------------------------------------------------------------------------------------
下記はよく見るソースですが、この間にif文でタイムアウト時の処理を入れています。
While ObjIe.Busy = True Or ObjIe.ReadyState <> 4: DoEvents: Wend

sleep100を入れているのは、IEを更新した場合に、無限ループに陥った場合があったので、一旦処理を止める処置をしています。

sleepはミリ秒、sleep100は0.1秒

IE(Internet Explorer)操作の事例

'********************************************************
'プロシージャ名:test1
'プロシージャの説明:yahooをIEで表示する
'条件内容:位置[top=0,left=0]、サイズ[W600×H600]
'********************************************************
sub test1()

 call ieView(objIE,"http://yahoo.co.jp")

end sub

1 2 3 4 5 6





sachikolondonさん

芸能ネタ、コンサートネタ、おもしろネタ、マジメネタなどをご紹介いたします♪