非表示にできる< 目次 >
はじめに
EXCEL VBAでIE(InternetExploer)を制御する方法について触れようと思います。
本ブログ記事は、Crowd Works で納品まで行い、実際にお金になったコードを元に紹介します。
本記事でできること
この制御についてですが、IEブラウザを掴むところ までになります。
掴むという表現ですが、IEブラウザ をVBAで 指定してあげることを指します。VBAでIEを制御するには、それぞれ独立したEXCELとIEブラウザを リンクさせてあげる必要があり、このことを「掴む」という表現にしています。
VBAでIEブラウザを制御(掴む)コード
どのようにVBAでIEブラウザを掴むのか。
主に、2つの方法があります。
1つ目:IEブラウザを新規で立ち上げるパターン
2つ目:既に 開いているIEブラウザをタスクバーから探して制御するパターン
<1つ目のパターン>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
'1つ目:IEブラウザを新規で立ち上げるパターン Dim IEAP As Object Dim STime As Date 'IE(InternetExplorer)のオブジェクトを作成する Set IEAP = CreateObject("InternetExplorer.Application") 'IE(InternetExplorer)を表示する IEAP.Visible = True '指定したURLのページを表示する IEAP.navigate IEURL 'Webブラウザ読込が完了するまで待つ Do While IEAP.readyState <> 4 Or IEAP.Busy = True DoEvents Loop STime = Now Do While DateAdd("S", 1, STime) > Now DoEvents Loop |
<2つ目のパターン>
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 |
'Windowを強制的に最前面にさせる。 Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Sub 起動済IEブラウザを捕まえる() Dim ShellObj As Object Dim SWindows As Object Dim SWindow As Object Dim IEAP As Object Dim hWnd As Long Dim IEnames as String Dim STime As Date Dim FSWFlag As Boolean '変数 IEnames にIEブラウザの名称を入れる IEnames = "Yahoo" '今回は分かりやすくYahooにしておきます。 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(IEnames)) = IEnames Then hWnd = IEAP.hWnd SetForegroundWindow IEAP.hWnd 'SetForegroundWindow でYahooのIEブラウザを前面にもってきます。 FSWFlag = True 'FSWFlag がTrueになれば、正しくIEブラウザを捕まえたフラグ Exit For End If Next 'もし FSWFlag が Falseだったら、IEブラウザを捕まえられなかったためSubを終わらせる。 If Not FSWFlag Then MsgBox "IEブラウザでYahoo画面が開いていません。Yahooを開いていから、再度実行してください。", vbOKOnly, "対象画面なしエラー" Exit Sub End If MsgBox "対象:IEブラウザを捕まえた→URL:" & IEAP.LocationURL End Sub |
紹介したコードが2つあるけど、どちらがオススメなの?
私の主観ですが、2つ目の方法が便利です。
CrowdWorksで作成する分には
依頼者と会話して貰いどちらのコードを利用しても良いのですが、
企業( 勤務先)で作成することを想定した場合、
セキュリティポリシーを気にする必要があるからです。
会社によってセキュリティポリシーが異なるため一概には言えませんが、
VBAで『社内システムにログイン→社内システムを制御 』するプログラムを立てる場合、
1つ目の方法だと社内システムにログインするID・PWを VBA側に組み込んで作成するケースだと、
セキュリティポリシーに引っかかる可能性があります。
(第三者にID・PWを知られる恐れがある。 ここは組み方次第ですが、EXCEL側にID欄・PW欄を空欄で作り 、利用者に入力させる方式を取れば 大丈夫だったり。)
2つ目の方法だと、 事前に社内システムへログインした状態にしてから、プログラムを 起動させる仕様にしておけば、セキュリティポリシーを意識しないで良くなり楽です。
余談①:VBAのIE制御をすることでできること-その1-
VBAでIEを掴むことで、さまざまなことを行える下準備ができます。
下準備ができなければ、その上にのっかるVBA↔IEブラウザの連携はできません。
(実際のVBA↔IEブラウザ間の 情報の連携方法は別記事でまとめる予定です。)
余談②:VBAのIE制御をすることでできること-その2-
VBA でIEを制御することで、
IE(InternetExploer)から情報を抽出しEXCELへ反映させる準備ができます。
また、EXCELの情報をもとにIEへ情報を投入する準備ができます。
他にもいろいろと細かいことができますが、
実益がある具体的な例をあげると以下のことをできます。
- 【できること】
- 株価のサイト(IEブラウザ)から指定企業の株価を抽出し、EXCELへ反映
- 楽天市場やAmazon(IEブラウザ)から指定商品の情報を抽出し、EXCELへ反映
- ○○サイト(IEブラウザ)から全情報抽出し、EXCELへ反映
- EXCELで記載した 商品を、楽天市場やAmazon(IEブラウザ)で注文
- EXCELに入力した納品データを、社内Webシステム(IEブラウザ)で投入
もしWebサイトから情報を収集したい場合、一般的なWebサイトでは、
CSVダウンロードなどの機能がなく、手動によるコピー&ペーストで情報を収集するのが一般的だと思います。
プログラムを組んでしまえば ワンクリックで処理を代行してくれるため、
プログラムが起動している間 に別作業を行えば最高の生産性を出すことができます。
終わりに
いかがでしたでしょうか。
今後もVBA↔IEブラウザ制御については需要があると思いますので、投稿していこうと思います。
また、ゆくゆくは『 1から始めるVBA ↔IEブラウザ 連携 講座』もシリーズものとして投稿していくつもりですので、今後とも どうぞよろしくお願いいたします。