VBAの勉強を始めてみた

色々試しています。

VBAでIEを操る(IEをオブジェクトとして取得)

IEInternet Explorer)の後継としてEdgeが登場していますが、IEもまだまだ現役なハズ。私は個人で Chrome を主に使っていますが、会社では IE を使っています(使わされています)。

なので、IEを使った社内システムにおいて、入力作業などを半自動化、あわよくば全自動化したいと思っている今日この頃なのであります。

と、いうことで、今回はVBAIEを操る前の「IEをオブジェクトとして取得する」というところまでをやってみたいと思います。

ゆっくり進行ですが、よろしくお願いします。

IEをオブジェクトとして取得し、VBAで操作する」というと、裏技的でアウトローな響きがありますが、そんなことはなく、Excelであれ、Wordであれ、オブジェクトとして参照し、VBAで操作するという考え方は一緒です。操作対象がExcelからIEになっただけと考えましょう。

IEをうんぬんする前に、VBAとオブジェクトの関係を、私なりに図示してみました。

f:id:kouten0430:20180804125637j:plain

VBAは「ExcelVBA」と呼ばれることが多く、混同してしまいがちですが、VBAVBAExcelExcelなのです。VBAExcelのオブジェクトを参照し、操り人形しているだけです。
外部ライブラリ群に関しては、プログラムの補佐というイメージですが、補佐機能を発動するためにVBAが操っている、というニュアンスの違いだけで他のオブジェクトと同類です。(違っていたらゴメンなさい)

f:id:kouten0430:20180804125922j:plain

さてさて、

傀儡師(プログラム)の指先と、人形(オブジェクト)を、糸(参照)で繋ぐ作業をコードで記述すると Set myApp = CreateObject("XXX") のようになりますが、XXXの部分に図中のアプリケーションを当てはめると以下の通りです。

  • Set myApp = CreateObject("Excel.Application")
  • Set myApp = CreateObject("Word.Application")
  • Set myApp = CreateObject("Access.Application")
  • Set myApp = CreateObject("PowerPoint.Application")
  • Set myApp = CreateObject("InternetExplorer.Application")

 

あれ?いつも、VBAExcelを操作しているけど、Set myApp = CreateObject("Excel.Application")なんて、記述したことないよ。という声が聞こえてきそうですが・・・・・・

確かに、ExcelVBAでは、Excelに付属しているVBAなので、Excelに関してわざわざ CreateObject しなくてもよく、WordVBA、AccessVBA、PowerPointVBAなども同様です。
親切な反面、VBAとオブジェクトの関係をわかりづらくしているような気もしますね(@_@;)

 

さて、今回の本題であるIEの制御ですが、IEVBAは付属していないので、Excel、Word、AccessPowerPointのいずれかに付属しているVBAで、CreateObjectしてやります。

あわせて、参照設定をしておけばインテリセンス(自動補完システム)が働くので便利です。
参照設定を行う際は、以下の項目にチェックを入れます。

 

ここまでを踏まえて、IEをオブジェクトとして取得するコードを記述してみましょう。

Sub test()
    Dim myApp As Object
    Set myApp = CreateObject("InternetExplorer.Application")
    myApp.Visible = True
End Sub


上記のコードを実行すると、何も表示していない、空っぽのIEが立ち上がったはずです。
myApp.Visible = True で画面表示させています。これをしなければ、非表示でバックグラウンドで立ち上がった状態になります。

このコードを実行後、VBEでオブジェクトブラウザーを開くと、IEオブジェクトのメンバがずらりと並んでいることを確認することができます。
(事前に参照設定してあることが前提ですが)

しかし、これだけでは、IEをオブジェクトとして取得しただけなので、プロパティやメソッドの種類や使用方法を知らなければ何にもできません。
その辺については次回以降に。