<IE起動 CreateObject("InternetExplorer.application")>
こんにちは、三流プログラマーKen3です。 今回は、 IEを起動して、指定したページを表示 ~~~~~~~~~~~~~~を軽く書きたいと思います。 普通に業務でVBAやってるとあまり関係無いので、 へぇ〜、そうなんだぁ程度に、気楽に読んでください。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba050.lzh に test050-book.xlsが保存されています。 遊んでみてください。 /* * 1.今回のキッカケ */ HPにアクセスランキングなんて付けると、 なぜか気になってしまう、、、そんな小物の自分に気が付く(笑) パソコン立ち上げたら、メールチェック、危ない質問メールがなかったら、 カウント数を見に行ってしまう。 http://www.ken3.org/cgi-bin/lime/limemgr.cgi ---- 種類別 http://www.ken3.org/cgi-bin/lime2/limemgr.cgi --- バックナンバー別 で、数字を見て、テキストファイルに 07 09 10 14 19 21 M 814 835 842 871 926 944 B 1428 1439 1446 1500 1614 1640 と書き込んで、おっ2時間の間に30人来てるよとか見て書き込んでます。 なんか笑ってしまうよね。 チョット前行った要望アンケートで、 ( http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi?mode=allread&no=31&page=0 ) IEのコントロールなどオブジェクト関係 4 人 7 % と、4人の読者の要望があったので、 今回、IEの起動をやってみたいと思います。 少数意見を拾うって、三流君らしくっていいんだけどさぁ、 VBAもっと詳しく解説しろ 17 人 30 % ↑~~~~~~~~~~~~~~~の大多数の3割の意見には、対応してるの? ギク、、、バックナンバー見なおして、弱いところを補足しなきゃイケナイヤ。 *やってほしい特集あったら、メール・掲示板に書いてください。 /* * 2.IEの起動は簡単 */ IEの起動は簡単で、 Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) End Sub ExcelやAccessの起動でお世話になっている、 CreateObjectを使用して、 "InternetExplorer.application" を作成してます。 その後、 objIE.Visible = True '見えるようにする(お約束) で、プロパティの可視をTrueにして、表示してます。←実行画面 /* * 3.指定したURLに飛ぶ */ 無事、起動ができたら、今度は指定したページに飛ばしたいです。 私のメインページ、 http://www.ken3.org/ に飛ばすには、 .Navigate メソッドを使います (全然関係無いけど、ネットスケープNavigator って頭に浮かんだ) Sub ie_go_ken3() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/" End Sub 使い方は簡単で、 objIE.Navigate "http://www.ken3.org/" と、文字列で飛びたい場所を指定してるたけです。
←実行画面 /* * 4.HTMLのソースを取り込む */ さて、IE起動、ページの移動、と順調?に来たので、 次は、アクセスカウンターの数値を取りこみたいんだけど、 どうしましょう? う〜ん、、、あまり考えててもしょうがないので、 今回は、HTMLのソースから取ることにします。 HTMLのソースは、埋まっていて、 .document.body.innerHTML で取出せます。 また、補足のポイントがあって、 読みこみ前に.document.body.innerHTMLを参照するとエラーが発生するので、 .Busy プロパティを見て、読み込み中、読み込み完了を判断します。 Sub ie_get_html() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'ランキングのページに飛ぶ objIE.Navigate "http://www.ken3.org/cgi-bin/lime/limemgr.cgi" '表示されるまで待つ、10秒後にエラーを判断する Dim time10 As Date '時刻格納用 time10 = DateAdd("s", 10, Now()) '現在から10秒後を計算 Do While objIE.Busy = True 'ビジー、読み込み中の間 DoEvents If time10 < Now() Then '10秒経過したか? MsgBox "タイムアウトです" Exit Sub End If Loop 'HTMLソースを取出す Dim strHTML As String strHTML = objIE.document.body.innerHTML '変数に代入 MsgBox strHTML 'テスト表示 Debug.Print strHTML 'イミディエイトにも表示 End Sub なんか、いきなり長くなったけど、ポイントは、 Do While objIE.Busy = True 'ビジー、読み込み中の間 で、.Busy = True読み込み中を判断してます。 ずっと読み込み中だとイヤなので、 If time10 < Now() Then '10秒経過したか? MsgBox "タイムアウトです" Exit Sub End If と、10秒後をチェックして、10秒経ったら関数を抜けてます。 strHTML = objIE.document.body.innerHTML '変数に代入 で、ソースを変数に代入して、 MsgBox strHTML 'テスト表示 Debug.Print strHTML 'イミディエイトにも表示 と、確認表示してます。 Debug.Printで、下記のように表示されてます。 <TR> <TH colSpan=2>計</TH> <TD align=right><B>1,073</B></TD> <TD><BR></TD></TR></TBODY></TABLE><BR><BR> <DIV align=right> ここから、計の文字を探して、1,073を取出せば、OKですね。 説明が長くなりそうなので、 計の文字を探して、1,073を取出しは、次回ループとInStr関数にします。
←デバック画面 /* * 5.おわりの挨拶 */ 今回は、 ・IEの起動 ・指定ページに飛ぶ ・HTMLのソースを取出す でした。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba050.lzh に test050-book.xlsが保存されています。 IEのコントロールも簡単、ハマるでしょ? また、使い方によっては、いろいろと変な処理もできそうです。 *掲示板荒らしとか自動広告クリックとか、へんな方向に使わないでね。。。 何か素朴な疑問などあったら、メール、掲示板に気軽に書いてください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
| ※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。 お奨め本の目次を見るだけでも勉強になったり |