~みんな株ってる?~

~目指せ!あと5年でセミリタイヤ~   ※ブラウザのフォントを等幅にすると快適に参照ができます。

Blogへの画像Uploader作成記~その5~

2008年12月15日 03時08分03秒 | シストレ-開発編
今回の機能は、「Blogのログインページを開く」です。

Blogのログインページを開くにはNavigate2コマンドを使います。

■構文■Navigate2 url
 url    :表示したいアドレス(URL)を文字列型で指定
 Return   :戻り値なし

■例1■
Sub Sample1()
 Dim objIE as Variant    ’オブジェクト参照保存用

 Set objIE = CreateObject("InternetExplorer.Application")
 objIE.Visible = True
 objIE.Navigate2 "http://www.google.com" ※1

End Sub

ココでの注意点は※1部分。
単にURLを開くだけであればコレで問題はありませんが、この処理自体は表示コマンドを発行した後、すぐに完了してしまうという事です。言い換えると、ページの表示が完了する前に次の処理に進んでしまうのです。

問題となる例としては、何か入力画面を表示して入力も自動化している場合。
ページが表示される(入力フィールドが表示される)前に入力を開始してしまうのです。そこで、IEの表示待ちの機能が必要になります。

表示が完了したかどうかの判定には以下の項目を使用します。
 objIE.ReadyState:ココが4(数値型)が表示完了
 objIE.Busy   :IEが処理中かどうかをTRUE/FALSEで表示
 objIE.StatusText:IE最下のステータス表示欄の文字列

※どこのサイトでも上2項目しかチェックしてないのですが、不完全であるため私はStatusTextもチェック項目に追加しています。

■例2■
Function WaitIE(objIE As Object)
 Dim ReadyStateNum As Integer
 Dim ReadyStateText As String

 ReadyStateNum = 4
 ReadyStateText = "Done"

 While objIE.ReadyState <> ReadyStateNum
 Wend
 While objIE.statustext <> ReadyStateText
 Wend
 While objIE.busy <> False
 Wend

End Function

この機能はページを移動する度に使用される機能なのでFunctionとして定義しています。呼び側からObject形式のobjIE(AxtiveX参照)を引数として受け取り、そのIEのステータスが全て表示完了を示すまで何もせずに待つ機能になります。
ReadyStateTextが"Done"になっているのは、私の環境が英語版のIEを使っているため。日本語IEだと"表示完了"とかになってるのかな?!

ココでの注意点。マウスカーソルがIEのリンク上にある時、ReadyStateTextにはそのリンク先のURLが表示され"Done"がいつまで経っても表示されなくなってしまいます。

~次回に続く~