本記事で出来ること
本記事では、EXCEL-VBAで 以下の内容が出来ます。
-出来ること-
・
(変数に IEブラウザを格納すること手法の説明)
どのような用途で必要?
有名なコードでは、CreateObject で毎回IEブラウザを立ち上げて、
それと同時にIEAP(変数:object型)に格納する手法がメジャーかなー思います。
↓このようなコード。★でIEブラウザが変数に格納されています。
Dim IEAP As Object
’★ここでIEブラウザを立ち上げる+同時にIEAP にSet(格納)されている。
Set IEAP = CreateObject("InternetExplorer.Application")
IEAP.Visible = True
'★変数IEAPにIEブラウザ格納されているから、navigateが有効になる。
' だから、IEブラウザは yahooを開きにいく。
IEAP.navigate "http://yahoo.co.jp"
この手法↑でIEブラウザの制御は、できるは「できる」のですが、
既にタスクバー内に存在するIEブラウザを 変数に格納する方法も
知っていた方がプログラムの融通…というか幅が利きます。
用途として挙げられる代表例は、
ログインを要するページから情報抽出(Webスクレイピング)したいとき です。
抽出したい情報が ログイン後のページにあった場合、
ログイン後ページから処理をスタートできたらセキュリティ面で非常に安心です。
※CreateObjectで都度ブラウザを立ち上げる方式だと、
コード内に ID/PWを入力するコードを入れておく必要があり
セキュリティ面で不安です。
コード(解説はコード内コメント参照)
利用するサイトは「http://yahoo.co.jp」です。
IEブラウザでYahooを開いた状態で ↓のコードを試してみてください。
Sub タスクバー内_IEブラウザ変数格納()
'★変数のセット
Dim ShellObj As Object
Dim SWindows As Object
Dim IEAP As Object 'IEブラウザの格納先(ここにいれる)
Dim FSWFlag As Boolean
Dim windowname As String 'IEブラウザのウィンドウタイトル格納先
'★格納したいIEブラウザのウィンドウタイトル(文字列)を変数(windowname)に格納
windowname = "Yahoo"
'Point:仮に、タスクバー内に複数のIEブラウザがあり、
' IEブラウザのウィンドウタイトル内で
' 「Yahoo金融」と「Yahoo旅行」があったとした場合、
' どちらも「Yahoo」が含まれ、重複エラーになる可能性があるため、
' 「Yahoo金融」を制御したいときは「Yahoo金」までは 入れてあげる必要有。
'★既に開いているIEブラウザを変数に格納する(捕まえる)
Set ShellObj = CreateObject("Shell.Application")
Set SWindows = ShellObj.Windows()
FSWFlag = False
For Each IEAP In SWindows
If InStr(IEAP, "Internet Explorer") <> 0 And Left(IEAP.LocationName, Len(windowname)) = "Yahoo" Then
FSWFlag = True
MsgBox "IEAPへ格納成功", vbInformation + vbOKCancel, "IEブラウザ制御" ' 成功したらポップアップ
Exit For
End If
Next
If Not FSWFlag Then
MsgBox "対象のIEブラウザが開いていません", vbCritical + vbOKCancel, "オープンエラー"
Exit Sub
End If
End Sub
おわりに
いかがでしたでしょうか。
今後もVBA↔IEブラウザ制御については需要があると思いますので、投稿していこうと思います。
また、ゆくゆくは『 1から始めるVBA ↔IEブラウザ 連携 講座』もシリーズものとして投稿し少しでも読者の方の役に立てれば良いなと考えておりますの、今後とも どうぞよろしくお願いいたします。