※このメルマガを書いてた時期はXP+IE6でした。Set objIE = CreateObject("InternetExplorer.application")で比較的簡単にIEを起動することができました。
上で、比較的簡単にIEを起動することができますなんて言っておきながら、
現在の環境(2008年5月) Windows Vista のIE7だと、ハマってしまいます。(不評の動画解説3連発 ア.[Windows Vista IE7 CreateObjectで失敗した画像] イ.[Vista IE7 信頼済みのサイトにしてVBAからコントロールしてみた] ウ.[UserFormにIEを貼り objIEに代入してかわした方法です。])
私がよく使う好きな方法はそのままでは、Vista IE7には通用しないのかぁ、、、
原因は、Set objIE = CreateObject("InternetExplorer.application")で.Navigateすると、
Windows Vista IE7の保護モードだと新しいIEが起動して制御不能になってしまいます・・・[三流君 Vista IE7の修正でハマる(小細工で逃げる)] ← これから Vista IE7に挑戦する人は、こちらも見てください。
※※あっ、IE6はそのままサンプルが動くと思います、頭からお騒がせしてスミマセン・・
※※※最新の情報(と言っても更新遅いですが)は、[三流君VBAでIE操作・自動制御]に載せているので合わせて見てください。
<InternetExplorer.application .document.body.innerText>
こんにちは、三流プログラマーKen3です。 今回は、 InternetExplorer.application オブジェクト の、.document.body.innerText 表示内容を軽く書きたいと思います。 へぇ〜、そうなんだぁ程度に、気楽に読んでください。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba052.lzh に test052-book.xlsが保存されています。 遊んでみてください。 /* * 1.今回のキッカケ */ [No.50 IE起動 CreateObject("InternetExplorer.application")] ( /vba/backno/vba050.html を参照) で、 Set objIE = CreateObject("InternetExplorer.application") で、インターネットエクスプローラーのオブジェクトを作り、 strHTML = objIE.document.body.innerHTML '変数に代入 でHTMLのソースを取出す。 <TR> <TH colSpan=2>計</TH> <TD align=right><B>1,073</B></TD> <TD><BR></TD></TR></TBODY></TABLE><BR><BR> ここから、計の文字を探して、1,073を取出せば、OKですね。 と、ここまで、やりました。 テーブルのタグを管理している部分があるか、 チェックして遊んでました。 *今後、やってほしい特集あったら、メール・掲示板に書いてください。 /* * 2.デバックで止める、ウォッチで中身を見る */ あんまり好きじゃないけど、 ブレークポイントを設定し、デバックで止めて、オブジェクトを見てみます。 ~~~~~~~~~~~~~~~~ Sub ie_stop() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/cgi-bin/lime/limemgr.cgi" 'デバックで止める MsgBox "OK?" End Sub この処理の、MsgBox "OK?"の行に設定したいので、 右クリック、設定・解除 -- ブレークポイントを選択し、設定します。←参考画面 次に変数を見たいのでウォッチ式を追加します。 追加方法は、 Dim objIE As Object 'IEオブジェクト参照用 など、変数を定義している場所で、 objIEをドラック、右クリックしてウォッチ式の追加を選択します。
←参考画面 /* * 3.実行して、オブジェクトの中身を探る */ ブレークポイントの設定 変数objIEをウォッチする準備が整ったので、 実行して、変数の中身を探ってみます。 実行すると、ブレークポイントの場所で止まります。 当たり前だろ、そのために設定したんでしょアナタが。 そうでしたね。 ブレークポイントで止まってからは、 飲み会に誘った女の子みたいに逃げないので 落ち着いて中身をチェックしましょう。 (飲み会で、逃げられてるみたいだなぁ、この書き方だと(笑)) ウォッチウインドウの変数名の横+をクリックして中身を探って行きます。
←参考画面 それにしても、階層が深いです。 テーブル系のオブジェクトを探すが、なかなか見つからない。 (女の子じゃなくって、IEの心の中は複雑なのね、、、) 途中で、innerTextなんてのを見つけたので、 中身を確認するために、となりのイミディエイトウインドウで、 ? objIE.document.body.innerText と中身を聞いてみた(アクセスしてみた。)
←参考画面 ? objIE.document.body.innerText [戻る] アクセス集計一覧 以下は当サイトのアクセス集計です。 リンク部をクリックすると該当ページへジャンプします。 順位項目カウント統計 1VBA系411 25.3% 2総合案内のページ(TOP)302 18.6% 3VBA系バックナンバー目次215 13.2% 4コンビニ166 10.2% 5愚痴系バックナンバー目次138 8.5% 6ASP系のメルマガ122 7.5% 7ASP系バックナンバー目次94 5.8% 8愚痴92 5.7% 9VB.NET(有料版)30 1.8% 10有料版メルマガ(TOP)24 1.5% 11Officeで作る(有料版)15 0.9% 12ASPで作るGame(有料版)14 0.9% 計1,623 と詰まったテキストが表示されました。 こっちのほうが<XXX>とタグが付いてないので、 使い易そうです。(ケースにもよるけどね) 目的のテーブル関係のオブジェクトは見つからなかったのですが、 ネタになりそうな.innerTextプロパティを拾ったので、 中断を解除します(ブレークで止めてた処理を継続し終わらせる)
←参考画面 /* * 4..document.body.innerText で取り出してみた */ さっそく、調べたプロパティ.innerTextを使って、 テキストを抜き出し表示してみました。 Sub ie_get_itext() 'VBA052で解説 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 'innerTextを取出す Dim strTEXT As String strTEXT = objIE.document.body.innerText '変数に代入 Debug.Print strTEXT 'イミディエイトにも表示 'UserFormを開く(確認用) frmINFO.txtINFO.Value = strTEXT 'HTMLを代入 frmINFO.Show 'フォームを開く End Sub ポイントは、 ~~~~~~~~~~~ Dim strTEXT As String strTEXT = objIE.document.body.innerText '変数に代入 で、変数代入後、 いつものMsgBoxだとツマラナイので、 確認用のユーザーフォームを作成し、 frmINFO.txtINFO.Value = strTEXT 'HTMLを代入 frmINFO.Show 'フォームを開く とフォームに表示してみました。 /* * 5.おわりの挨拶 */ 今回は、 ・プレークポイントを設定、ウォッチ式の追加、変数の中身を探る ・.document.body.innerTextで、IEのテキスト表示データを撮り込む でした。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba052.lzh に test052-book.xlsが保存されています。 いろいろなWebサイトから、データをExcelやAccessにもって来れそうですね。 何か素朴な疑問などあったら、メール、掲示板に気軽に書いてください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 ---------------------------------- 関連項目(ただのバックナンバー紹介) ---------------------------------- [No.50 IE起動 CreateObject("InternetExplorer.application")] ( /vba/backno/vba050.html を参照) では、IEの起動方法を書きました。 [ イミディエイト ウインドウ と Debug.Print ] ( http://www.ken3.org/vba/iwind.html を参照 ) で、イミディエイト ウインドウの説明を少し。 [ プロパティ、メソッドを探る方法 ] ( http://www.ken3.org/vba/excel-help.html を参照 ) で、プロパティ、メソッドを探る方法の説明を少し行いました。 時間があったら、あわせてみて下さい。 -------------------- 読者からのお便り紹介 -------------------- In message "無料のこっちのほうがいい", am/pm最高 さん wrote... >服屋が書く!ACCESS2000・POSレジ自作講座! >けんぞうのマガより筋道がしっかりしている >>バックナンバーは以下から見ることができます。 >>http://www.leasekin.com/rodan/mag2pos/p1_20.htm >脈略の無い、思い付き解説者さんも見習ってみては・・・(^○^) ---- XXX最高はコンビニ系掲示板も見てる読者さんだと予想。 しばらく無かった、ここみて勉強しろ系のメールですね。 http://www.mag2.com/m/0000075580.htm が登録ページで、 私もざっと見てみたけど、 まず、図がキレイ、この図解はわかり易いと思う、丁寧だし、 私のマウスの手書き文字とは雲泥の差、月とすっぽん、 比べると怒られるぐらい丁寧です。 雑誌に載るメルマガはやはり違うなぁと思った。 おいおい、少しは差を埋める努力しろって? *差がありすぎて、チョット追いつけないかなぁ。 ほかにもお奨めメルマガあったら、教えてください。 脈略の無いマイペース、思い付き解説のKen3でした。 ~~~~~~~~↑たしかに、、、、、
| ※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。 お奨め本の目次を見るだけでも勉強になったり |