Excel VBAでIEを閉じる
2018/11/09
Webブラウザで一連の操作が終了した場合、Excelマクロからieを閉じる方法を今回は紹介します。
IEを終了するには「Quit」を宣言すればいいだけとなります
1 |
ojbIE.Quit |
ieを閉じるまで、ヒトが操作すると以下の行為が必要です。
- IEを立ち上げる
- URLを入力する
- サイトが表示されるのを待つ
- サイトを閉じる
といった動きになりますので、以下の通りの記述をすれば、該当サイトの再読み込みが可能となります。
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 |
Dim objIE As InternetExplorer Dim docIE As HTMLDocument Sub IE_Quit() 'Internet Exploreを立ち上げる Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'URLを指定する objIE.Navigate "https://www.yahoo.co.jp/" '該当のWebサイトが表示されるのを待つ While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE DoEvents Wend 'サイトをリフレッシュする ObjIE.Quit 'オブジェクト参照を解除 Set docIE = Nothing Set objIE = Nothing End Sub |
マクロを実行したら、IEが起動し「Yahoo!Japan」が開き、そしてIEが閉じませんでしたか?
VBAに慣れていない方からすると難しく感じるかもしれませんが、この辺は「お約束」としてある程度覚えてしまった方がいいでしょう。
上記コードの解説
上記コードを上から順に、「お約束」ごとや「意味」などを簡単に解説します。
変数を定義(objIE)
1 |
Dim objIE As InternetExplorer |
間違っているかもしれませんが、理解いただくために嘘くさい説明をすると
モジュール : このプログラム全体
変数 : 長い単語を何度も書くのはめんどくさいので、省略文字に置き換える
オブジェクト : 集合体
「objIE」は好きな文字列に変更いただいてかまいません。
当サイトでは「objIE」で統一していきます。
参考まで、「Dim objIE As Object」でも稼働しますが、Internet Explorer型オブジェクトを指定することでインテリセンス(自動補完)機能が働くので今後のコーディングに非常に便利です。
変数を定義(docIE)
1 |
Dim docIE As HTMLDocument |
今回は使用していませんが、以後毎回使用するために記載しておきます。
サイトを呼び出した結果、上記Internet Explorer型オブジェクトである「objIE」のDocumentプロパティにHTMLDocumentオブジェクトとして収録されます。
と書いても難しいかと思いますので、毎回お約束のように定義してください。
なお経験上、HTML型ドキュメントにセットしなければ取得できないプロパティもあります。
そのため、HTMLドキュメントに収録することをお勧めします。
上記同様「docIE」ば好きな文字列に変更いただいてかまいません。
当サイトでは「docIE」で統一していきます。
プログラムの実行単位を定義
1 2 3 4 5 |
Sub IE_open() ・・・・ End Sub |
次のEnd Subまでがプログラムになります。
IE_openはそのプログラム名となり、最初のSubの直後に記載します。
()はここではお約束として覚えておきましょう。
IE_openという名前のプログラムは「・・・」の間に記述されることになります。
IEを立ち上げる
1 2 |
Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True |
最初に指定したオブジェクトの変数にオブジェクトを作成し、そのオブジェクトを可視化しています。
なんてことは覚えても、ExcelでVBAを操作する限りにおいては役に立ちません。
覚えておきたいのは、ObjIEは先に定義した変数ですので、この名前「objIE」を変更する場合は、全体的に修正をしてください。
URLを指定
1 |
objIE.Navigate https://www.yahoo.co.jp/" |
もちろん好きなサイトのURLに変更いただければ、そのサイトが表示されることとなります。
画面が表示されるのを待つ
1 2 3 |
While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE DoEvents Wend |
IEを閉じる
1 |
ojbIE.Quit |
オブジェクトへの参照を解除
1 2 |
Set docIE = Nothing Set objIE = Nothing |
不要論もあるようですが、ここはお約束で設定しています。
IEのプロセスが残る場合がある
「Quit」だけではIEのプロセスが残る場合があります。
その場合の対処方法について以下で説明していますが、これ自体を起動前の初期処理で実施することをお勧めします。