IE操作【IE起動~読み込み】

では前回のIEの自動操作の1つ目のボタンに登録しているマクロの解説をしていきたいと思います。
今回解説する部分はフォームの入力【コード】から抜き出してきた下記のコード部分です。
Sub IE操作()
Dim objIE As Object
Dim obj As Object
Dim slt As Object
Dim opt As Object
Dim s As Integer
Dim hname As String
Dim brd As String

'hnameの変数にB2のセルの値を代入
hname = Worksheets("情報").Range("B2").Value

'pasの変数にB3のセルの値を代入
brd = Worksheets("情報").Range("B3").Value

'InternetExplorerをobjIEに代入し、IEのプロセスを起動
Set objIE = CreateObject("InternetExplorer.Application")
    
    'IEを可視化するか = はい
    objIE.Visible = True
    
    'IEのリンク先URLは情報のシートのB1のセルのURL
    objIE.Navigate Worksheets("情報").Range("B1").Value
    
    'IEの表示待ち
    wait objIE
Sub wait(objIE As Object)
'objIEに代入されたInternetExplorerがビジー状態、もしくは読み込み待ちの間、処理を待つ
Do While objIE.Busy Or objIE.ReadyState < 4
    DoEvents
Loop
End Sub
上記のコードを解説していきたいのですが、1つの記事だとあまりに長くなりますので分けて解説しようと思います。

変数宣言~代入

まずは変数です。
もう大丈夫だと思いますが、おさらいという事で解説していきます。
Dim objIE As Object  =  InternetExplorerのオブジェクトなので略してobjIE
Dim obj As Object    =  オブジェクトの代入の際に使うためオブジェクトを略してobj
Dim slt As Object    =  IEを操作する際のHTMLのタグにあるselectを略してslt
Dim opt As Object    =  IEを操作する際のHTMLのタグにあるoptionを略してopt
Dim s As Integer     =  繰り返しの際に使う変数でStartの意味からs
Dim hname As String  =  HandleNameを略してhname
Dim brd As String     =  BirthDayを略してbrd
というように自分で使いやすい名前で変数宣言しています。

次に変数の代入ですが、下記のほかにもForやFor Eachでの代入もありますが、そちらは下記のForやForEachの解説の際に説明していきます。
hname = Worksheets("情報").Range("B2").Value
brd = Worksheets("情報").Range("B3").Value
Set objIE = CreateObject("InternetExplorer.Application")
上記3つありますが、以前の変数の代入【Dim】でも解説していますが、代入する型の違いから覚えることは2種類だけです。

IEの起動~状態~サイトへのアクセス~読み込み待ち

Set objIE = CreateObject("InternetExplorer.Application")



上記の変数の代入ではオブジェクトを代入するので、変数名の前にSetをつけて「Set 変数名 = 代入するオブジェクト」となります。
また、【CreateObject("")】は、そのまま英語を訳してオブジェクトを作成するということになりますので、オブジェクトを作成する際に使用します。
今回はIEを起動するのでIEのオブジェクトの作成が必要になりますのでCreateObjectでInternetExplorer.Applicationを作成してます。

他の2つに関しては変数に文字列を代入するのでSetなどは使わず、「変数名 = 代入する値」という事になります。

objIE.Visible = True


上記については、作成したオブジェクト=IEのウィンドウ表示する
上記の色分けの様にIEの可視化をするかしないかになります。
もし可視化しない場合はTrueの部分をFalseにしてあげる事でウィンドウが表示されない状態になります。


objIE.Navigate Worksheets("情報").Range("B1").Value


これは「IEでどこどこのサイトにアクセスしてください」という命令になります。
「情報のシートのB1のセルにあるURLにNavigateで行きますよ」という意味になります。
また、直接URLを指定する場合はobjIE.Navigate "URL"というように""で囲んだURLを記載します。

wait objIE


この部分ですが、先に【Sub wait(objIE As Object)】を理解した上で解説しないと難しいと思いますので、そちらを先に解説します。
また、Subプロシージャの呼び出しについて理解していると次に進みやすいと思いますので、こちらのSubプロシージャの呼び出しもあわせて確認するといいかもしれません。

上記のwaitというSubプロシージャ内で処理している内容を簡潔に説明すると、「IEが読み込みをしている最中、もしくはビジー状態で動かない時、DoEvents関数でOSに処理を戻す事で読み込み待ちをしている」という状態になります。

この処理をしないでIEの操作をするとどうなるかというと、IEがページを読み込んでいないのに、次のマクロの処理に入ってしまうので、意図しない操作をしてしまうことになります。
なので正確な処理をするためにもwaitというSubプロシージャの内容は覚えておいてください。

では上記を踏まえた上で【wait objIE】について解説します。
これは「SubプロシージャをSubプロシージャから呼び出して処理をする」ということになります。
どういうことかというと【Sub IE操作()】を実行している中で【Sub wait(objIE As Object)】を呼び出して実行しているのです。

表記については【Subプロシージャ名 受け渡す変数名】となります。
実行する側のプロシージャにも受け渡される変数を宣言しないといけないのですが、その変数を宣言する場所が、Sub プロシージャ名()の括弧の部分になります。

ここが最初のうちは少し慣れないと思うのですが、SubプロシージャからSubプロシージャを呼び出す理由としては、IEの操作をする際、ページが変わる度に読み込み待ちの処理を入力すると大変なので、なら1つだけSubプロシージャとして書いておいて、読み込み待ちの処理をする度にSubプロシージャを呼び出そうという事です。

最後に

VBAを勉強始めたばかりの時は、ここまでの解説でもかなり難しく感じると思いますが、実際に実行したりHTMLを見てみることで感覚を掴むのが一番早い上達方法だと思いますので、難しく考えず1つ1つゆっくり進んでみてください。

では次回は値の入力について解説していきたいと思います。