HP:[三流君(TOPへ)]/[VBA系(TOP)]
/[VBAでIEを操作(TOP)へ]
/[過去のメルマガ記事一覧] はじめは[WebBrowserを参照設定]から /次に小さな[IE操作のサンプル]を見たりして /[少し大きなIEを使ったサンプル]を作ってみたり Document(タグ付き文章): [Document.Forms(入力処理)] /[Document.Links(リンク情報)] /[Document.Images(画像情報)] /[Document.Frames(フレーム処理)] IE,WebBrowser: [IE プロパティ一覧(各種設定)] /[IE メソッド一覧(イロイロな動作)] /[WebBrowserのイベントに処理を書く] |
挨拶:VBAで(ExcelやAccessなどから)InternetExplorer WebBrowserを操作してみたいと思います。
呪文のような Set objIE = CreateObject("InternetExplorer.application")でVBAからIE操作を楽しんでください・・・
百聞は一見に〜こんなことができます。
いきなり余談と脱線: 野球で横浜ベイファンの昔話ですが [No.138 アイツが打てたから、オレも打てる。マシンガン打線] ← アイツ(三流君)がやれたんだったら、オレも(アナタも)やれるって感じの心理で、ソフト作りや他の仕事も まぁ同じようなもんで、成功例があると自分もやればそこに行き着くことができる(やれる)
そんな↑感覚(やれる)を持ってもらいたいので、あえて動作動画から紹介します。※VBAでIE操作は簡単にできると心に暗示をかけてから、最後まで三流解説を読んでくださいね。みなさんなら必ずできます
Webページにデータセット系(VBA Excel A列の値を IEにセットする) |
論より証拠:その他動くサンプル ↑で動くサンプルとか三流のクセに偉そうに上から目線で言っておきながら、 [プログラマー発芽の条件]は、人それぞれ違うので、私の三流解説ページが栄養(キッカケ)となって、覚醒(発芽)してもらえるとうれしいです。 |
↑みたいな動画・サンプルソースは
・[IE操作解説(rss)] ... 主にobjIEを使ったソースコードなど
・[Ken3memo(rss)] ... 初めはまじめに書いてたけど最近はプログラム系以外が多いです。。。
や
・[Ken3動画Memo] ... テストの動画・試行錯誤、失敗の記録
を見てください。
処理のパターンは、
1.オブジェクトの作成・・まずは、IEを起動したり、起動済みのIEを捕まえたり
2.ページを表示させる・・次は、処理したい目的のページを表示させます。
3.データを取得したり、セットしたり、HTML文章 .Documentの処理
3.1 次のページ や 新しいウインドウの処理 ・・ リンクから次ページに飛んだり、フォームにデータをセットして送信・登録したり。検索データをセットしたり。
3.2 ↑で、次のページに処理が移り、3へ戻る(繰り返す)
4.終了処理
そんな感じかなぁ※おおざっぱ過ぎだろ・・・
※まぁ、↓これを貼り付けて、実行してみてください(Vista IE7はこれだと動かないけど)
|
リニューアル前の方が評判良かったり
一度、こちらから先に見て下さい。
脱線した、話を戻して:
今から書く リニューアル後のページも捨てたモンじゃないぞ(手前味噌・自分で言うなよ(笑))
まずは、IEを起動したり、起動済みのIEを捕まえたり、
処理するオブジェクトを作ります
初めの入り口は 大きく2つじゃないですが、
ア.Set オブジェクト変数 = CreateObject("InternetExplorer.Application")
オブジェクトを変数に代入してから オブジェクト変数.メソッド 変数.プロパティ みたいに使う方法
※あっ忘れてた、0番目本当の一番初めとして、ぜひWebBrowserの参照設定→ [VBAから IEを使うための 参照設定の方法] を 初めに見てください。※※特にこれから始める人は。
次の方法は、
イ.ExcelのUserFormにWebBrowserのコントロールを貼り
コントロール名.メソッド コントロール名.プロパティ
※実際の貼り付け方、手順は [番外編 Excel UserForm に IEを貼る] を 見てください。
最後、表示させない方法もあって(少し特殊ですが)
ウ.As HTMLDocumentと.createDocumentFromUrlで文章を読み込み
MSHTMLを参照設定後、As HTMLDocument で変数を定義して、.createDocumentFromUrlでHTML文章を読み込みデータを取り出す。そんな方法もあります。
詳細・手順は[MSHTMLを参照設定後、As HTMLDocument と.createDocumentFromUrlで文章を読み込み使うテスト]を見てください。
※↑は、Documentの操作に慣れてきたら使ってみてください。初めは画面が表示されていた方がテストやデバック時に便利だと思います。
まぁ、どれから入っても .メソッド .プロパティ を 探らないといけないのですが。。
新規にCreateしないで、今表示されているIEを使ったり、新しく起動したIEを使いたい、そんな場面・処理があると思います。
思いつくのが、CreateObjectと対になるGetObjectを使用して、GetObject("InternetExplorer.Application")で表示済み・起動済みのIEを使用できれば簡単なのですが、なぜかうまくいかなかったので(もしかして私のミスかも)、最近は違う方向から攻めてます(別な方法を使ってます)。
ア.パターン的にCreateObject("Shell.Application")から表示されているIEを探してます。
百聞は一見に〜三流君はこんな取得方法を使ってます。
コードは[起動済みのIEを取得する(GetObject もどき)、新規で起動しないで使い回す]
を見てください。
イ.新しく開かれたIEを探す
Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1)
↑新規で起動した IE が 必ず・絶対に一番後ろと決め付けて組んだプログラムです。(プログラマーに絶対は無いだろクソ三流って感じですが・・・)
コードは[新しく開かれたIEを探す]を見てください。
番外編 蛇足:もしかしたら、新規のIEはWebBrowserのイベントで捕まえる、こっちのほうが操作し易いかなぁ。
[新規のウインドウ(IE)が起動する イベントを見る。]
↑WebBrowser1のNewWindow2 新しくウインドウが作られる処理で、
Set ppDisp = Me.WebBrowser2
と1つ呪文を書きます。(呪文ってオイ、、、)、余談です読み飛ばしてください。
次は、処理したい目的のページを表示させます。
.Navigate の メソッドにURLを渡したりして、実行します
objIE.Navigate "http://www.google.co.jp/" 'こんな感じでGoogleのページを表示
ページの表示.Navigateのメソッドを使う
ア.単純に指定したURLを開く ページの移動 目的のページを表示する objIE.Navigate "http://www.xxxx.xxx/" 文字列でURLを指定するだけです。 |
イ.第二引数 Flagsを指定して隣のタブでURLを開く objIE.Navigate2 "http://www.xxxx.xxx/", &H800 '新しいタブで表示 2048(16進数で800) ※.Navigate2←2に注意 |
表示を待たないと、表示待ちを入れないで いきなりオブジェクトに触りに行くと(ドキュメントなどのオブジェクトにアクセスすると) 相手の心の準備ができていないみたいで(オブジェクトの展開処理が間に合わないみたいで)、どこ見てんのよ(古)と怒られるじゃなかった、実行時エラー -2147467259 (80004005) Document メソッドは失敗しました ・・・など、エラーで怒られるんですよ。
なので、objIE.Navigate のページ移動後に相手の準備ができるが確認します。
私がよく使っている方法は、
While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
DoEvents
Wend
みたいに、.Busy と .ReadyState の状態を見てます
そんな試行錯誤は、
・[.Busy プロパティ の テスト IE操作]
・[.ReadyState プロパティ の テスト IE操作]
を見て笑ってください。
Document 文章の処理なので、大きく分けると、下記のような感じになります
こんなこと や あんなこと できます、、の紹介を目的として、サンプルや過去に作った動画を紹介します
手前味噌のサンプルとリンク:
・[過去のメルマガIE記事]・・・メルマガで書いた記事。こっちが好きな少数派も居たりして?
・[IEの操作 ブログ記事]・・・小さな単位で抜き出してBlogにUPしただけ
・[IEを使った三流サンプル] ・・・ 少し長めのサンプル
や
声がうわずって、[え〜と]、[こんな感じ] の単語連発で 間が悪く 聞き取りにくい
・[恥ずかしい解説動画(VBA IE動画解説)]・・・YouTubeに解説、操作動画アップしてます。
さらにひどい、
読者説明よりも SEOが目的 なのか知らないが、
・[変なブックマーク(WebBrowser系)]・・・はてなブックマーク使ってみました。使い易いですね。
ほんとに、基本動作の骨組みだけのサンプルです。肉付けして皆さんが活用できると使えるといいなぁ・・・
※初めは、参照設定から設定して、単純な表示から遊んでみてください。
'参照設定 Microsoft Internet Controls(Microsoft Browser Helpers)
'Microsoft HTML Object Library の 2つを忘れずに
'参照設定の方法は、 http://www.ken3.org/cgi-bin/group/vba_ie_object.asp をみてください。
|
↑単純に表示しただけなので、ここから先が長いのですが、、、
イロイロな処理の中で多いのが、表の取り込みです。
・Webから表 TABLE データを取り出したい(Webクエリーがあるけど、自分で取得したい)
そんな処理のサンプルは↓
[VBA IE Webページの表を取り込む]
↑手前味噌サンプルですが、表の取り込みでアレンジして使ってみてください。
・Webページからファイルをダウンロードしたい、
名前をつけて保存 や 対象をファイルに保存、そんな操作時は、
[No.120 URLDownloadToFile APIを使用してWebからファイルをダウンロードしてみた]
を見てください。APIと言ってますが意外と簡単ですよ(キャッシュの問題があるけど)
・JavaScriptから出力される Aleatやconfirm の確認・メッセージ などで処理が止まる。OK はい などを押したいけど、何かいい方法ありませんか?
と、質問をいただく。
少し変な方向でアプローチしてみました。
VBAから読み込んだページにニセのpromptとalertをぶち込んで、ポップアップメッセージを動作させない、そんなセコイ方法です。
[VBA IE操作 ニセのpromptとalert を 挿入する そんな実験]を試してみて下さい。
↑はかなりセコイので、プロはこっちかなぁ?↓
VBAでHTMLのページ内でJavaScriptのConfirm関数で表示されるメッセージのボタンを自動的にクリックする
http://q.hatena.ne.jp/1248657374
↑で、
ポップアップウインドウの件が解決してるみたいです。
こちらを参考にして、作成してみてください。
※私も精進しなくては、、、と思いつつ、最近は、何も進んでいなかったり。。。
いろいろと攻略していない未解決や問題点があって
・画像を自動でアップしたいので INPUTタグTYPE FILEにファイル名を入れたい。
↑これも、セキュリティを突破できてません。
全ての質問には、答えられませんが、リクエストや質問があったら、
[作者(三流君)に質問する] から 気軽に送ってください
読者の声:テメエの(三流プログラマーの) くどい説明、わかりにくいサンプル、手前味噌・自己満足のリンクを見るよりも、自分で調べるから、正式な資料やヘルプのURL と 調べ方・操作方法を書いてくれれば 自分で見て調べるからさ、さっさと教えな。
そうですか、、、私がIE操作、プロパティやメソッドを探る方法 を ネタばらしすると(もうネタバレしちゃうの?もっとひっぱろうよ、ページをたらいまわしにしようぜ(おぃぉぃ))
プログラム作成前準備として、
・[参照設定] ・・・ HTML Object Library と Microsoft Internet Controls を設定してから組み始めるのが正解かなぁ。
・[F2を押して、オブジェクトブラウザで遊ぶ]・・・ ↑参照設定後、F2オブジェクトブラウザを使ってみたり。
開発時、デバック時など、ハマりながら操作する感じは、
・[STOPで止め ウォッチ式 を使う]・・・プログラムを途中で止めて objIEの変数の中を直接見にいったり
MSDNとGoogle検索:F1のヘルプが効けば一番楽なんだけど、IE系の説明・ヘルプが出ないので
・[三流君 が MSDN で InternetExplorer の 資料を探す] ・・・ まぁ英語のページは嫌いだけど、MSDNから頑張って探したり
↑だとツライので、最近はGoogleの検索を主に使っていたり↓
・[番外編 GoogleでoIE,objIE,WebBrowserをKeyWordにして検索]・・・検索のキーワードがなかなか思いつかないと思うので私のお気に入りのキーワードを紹介します。(読者の声:だったら先に書けよ)
こんな感じで、探ってます。目新しい画期的な回答で無くスミマセン。
さて、IE操作 Documentの森・WebBrowserの山を頼りないガイドの三流君と一緒にさまよってみましょうか!!!
このページ 三流プログラマー的解説がIE操作方法(プロパティやメソッド)の入り口として何かの参考・お役に立てれば幸いです。
まだまだ、書かないといけないIE操作 プロパティやメソッドなどの組み合わせがあるのですが、このあたりで逃げるように失礼します(オイオイ)。更新が遅いけど温かく見守ってください 更新中 まだまだ書きかけ
いろいろな表現があって、かえって迷ってしまうかもしれませんが、数をこなすと見えてくるので、私のサンプルだけじゃなく、いろいろなサンプルを探して見てください。[番外編 GoogleでoIE,objIE,WebBrowserをKeyWordにして検索]にお勧めのキーワード検索方法を載せてます
ヘルプはどこにあるの?三流なのにどうやって資料を探しどこで勉強したの?
と、質問をいただきます。(自分で調べていきたい読者様の前向きな問い合わせです)
やはり本家Microsoft.comのよく聞く?MSDNを探ってみるのも・・・(あまり深く見ると楽しむ前に挫折しかかるので、下記はほどほどに・・・)
英語だけどMSDNの下記の項目を見るとオブジェクトの階層構造がわかりやすいと思います。
MSDN Library - http://msdn.microsoft.com/en-us/library/ms123401.aspx
□□□|--- Internet Explorer Development http://msdn.microsoft.com/en-us/library/aa155133.aspx
深いので省略(オイオイ、意味無いだろTOPからたどらせないと)
□□□□□□□|--- WebBrowser Control http://msdn.microsoft.com/en-us/library/aa752040.aspx
の
IE Reference for Visual Basic Developers ↓に深く埋まってます(英語ですが)
[http://msdn2.microsoft.com/en-us/library/aa752043.aspx] が 一覧で、その 下に、
InternetExplorer Object [http://msdn.microsoft.com/en-us/library/aa752084.aspx] をクリック
document Object [http://msdn.microsoft.com/en-us/library/ms531073.aspx] をクリック
Collections の 中の all [http://msdn.microsoft.com/en-us/library/ms537434.aspx] をクリック
などして、さまよいながら・・・探したりしてます。(三流ガイドの私も迷ってます)
続きは、[IE Web Browser のプロパティ・メソッドを調べる] を 見てください。
検索エンジンやリンクから、せっかく私のサイトに来ていただいたのですが、下記2つの検索結果がかなり参考になったり・・・するのでは???
IE|oIE|WebBrowser|objIE 魔界の 2つをキーワードにしてGoogleで検索する
(↑かなりの確立で有効な回答が得られると思います、先輩方の回答を見ると謎が解けると思います。私もすらっと回答できる、そんな人になりたいですね。。。)
↓あとは、パターン的にoIE,objIEと変数名を定義している人とWebBrowser1.が多いので、
oIE|objIE|WebBrowserをキーワードにしてGoogleで検索する
も有効かなぁ。※短いサンプルなどが見つかり、参考となるのでは?
さらに検索を紹介すると、[InternetExplorer.application]をキーワードにしてマイクロソフト内を検索する
などなど・・・
↑1歩1歩独自で進めたい人はこんな感じで、実際のコード や 掲示板・ML上の自分と似た質問のやりとりを見ながら進めるのがいいと思います。
※また、BBSやMLの空気を読んで(過去ログも読んで)、上級者がいらっしゃる掲示板に質問を投げてみるのもひとつの手です。
検索に迷ったら(IE操作の道に迷ったら)、objIEやoIE さらに InternetExplorer.application や Document.All などをキーワードにGoogleやYahooで探ってみてください。
脱線すると、google検索のワンダーホイールって面白い
↓私のよく使う変数 objIEで検索すると
objIEの結果をワンダーホイールで表示
↑なかなか、楽しめそうです。※関連項目の全てが線でつながらないけど(全てつながるとかなり面白いのに。)
googleってすげぇなぁ。
過去のメールマガジンのリンクが長かったので、下記に移動しました。
[IE操作 メルマガ 一覧]
よろしくお願いします。
改版履歴 更新情報:過去のIE操作の解説はこちら↓(IE6+XP,IE7+XP の記事です)
2009-12-01:[過去の解説 vba_ie_20091201.asp]
2009-06-01:[過去の解説 vba_ie_20090601.asp]
2009-02-01:[過去の解説 vba_ie_20090201.asp]
2008-05-01:[過去の解説 vba_ie_20080501.asp]
2007-08-31:[過去の解説 vba_ie_20070831.asp]
2007-05-20:[過去の解説 vba_ie20070520.asp]
もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
Blog:[サンプルコードのゴミ箱]
動画:[VBA解説・テスト動画]
[三流君(TOPへ)] / [VBAで楽しく] / [記事一覧] |