ExcelのVBAを使ってInternet Explorerを操作してみたいと思います。
参考にさせていただいた(パクった!?)のはコチラ
今のところ具体的な使い道などは見えていないのですが、とりあえず技術としてということで・・・
大まかな流れは
「目的のサイトを開く」→「ページの表示が完了するまで待つ」→「表示されたらページ内のリンクを拾い出す」→「リンクを順に辿る」→「リンク先に目的のJPEGファイルが存在するか探す」→「リンクのアドレスとファイルの有無をExcelに吐き出す」といったところでしょうか。
まずはエクセルを立ち上げた後、VBE(Visual Basic Editor)を「Alt+F11」の同時押しで起動しましょう。(このコマンドはExcelのバージョンを問わず使えるようなので、マウスでカチカチやるより手っ取り早そうです)
自分の環境は未だにExcel2000を使っている状態なのでかなり古いバージョンになりますが、基本的な操作などはそう変わっていないようです。
もっとも使える機能などは変更されていると思いますので、まずは基本的な構文などを覚える程度にやっていきます。
上記の方法でVBEを起動したら
「VBAプロジェクト(Book1.Xls)」を右クリック→「挿入」→「標準モジュール」
をクリックします。
モジュールというのはプログラムの集まりみたいなものだと思いましょう。
このモジュール内に一連の処理を書き連ねていきます。
まずはインターネットエクスプローラーを起動させるところから。
以下のように記述していきます。
Sub Main()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
End Sub
簡単に説明すると「オブジェクトとして宣言した変数:ieに呼び出したインターネットエクスプローラーの画面を格納して、画面を表示します」てな感じ?
次以降で変数:ieのメソッドを呼び出して色んな動作を実行していきます。
ここまで入力したらF5キーを押してみましょう。(F5で作成したプロシージャを実行できます)
画面が空白のIE(Internet Explorer)が起動すれば成功、エラーが出たら入力間違いの可能性大なのでもう一度見直してみましょう。
空白で開いてもどうしようもないので、まずはURLを指定して該当するサイトを開くようにしてみましょう。
この動作は「Navigateメソッド」を呼び出すことで可能になります。
上で作成したプロシージャの「End Sub」の上の行に
ie.Navigate "http://www.forest.impress.co.jp/article/2013/05/excelvba/"
と追記してF5を押してみましょう。
空白ではなくきちんと表示されたらOKです。
単にIEを起動して目的のサイトを表示させるだけならたったこれだけのプログラムで済んでしまいます。なんだか簡単そうですね~。
続いてはIEの表示が完了するまで次の処理を行わないよう状態のチェックを行うプロシージャを追加しましょう。
実際に使用しているときにも、画面をクリックしてからページがきちんと表示されるには多少の時間が掛かりますよね?
同じように、表示が完了する前に次の動作を要求するとExcelがエラーを吐いてしまいます。
Mainプロシージャの「End Sub」の下に以下のプロシージャを追加しましょう。
Sub waitNavigation(ie As Object)
Do While ie.Busy Or ie.ReadyState < 4
DoEvents
Loop
End Sub
一行目の()の中身は引数ってヤツで、外部から渡される値を使ってプロシージャを実行するよ~みたいな感じです。
で、このwaitNavigationをMainプロシージャから呼び出すように、Main~の「End Sub」の上に追記します。
waitNavigation ie
これで「ie」を引数としてwaitNavigationプロシージャを呼び出すことができます。
今のところ、VAEのウィンドウには以下のとおりに記載されているかと思います。
長くなってきたので今回はここまでで。
Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応