|
HP:[三流君(TOPへ)]/[VBA系(TOP)]
/[VBAでIEを操作(TOP)へ]
/[過去のメルマガ記事一覧] 大分類:[Document(タグ付き文章)] /[Document.Forms(入力処理)] /[Document.Links(リンク情報)] /[Document.Images(画像情報)] /[Document.Frames(フレーム処理)] IE,WebBrowser: [IE プロパティ一覧(各種設定)] /[IE メソッド一覧(イロイロな動作)] /[WebBrowserのイベントに処理を書く] |
挨拶:VBAで(ExcelやAccessなどから)InternetExplorer WebBrowserを操作してみたいと思います。
ここでは、最近見かけなくなった?フレームページの操作について、少し書いてみます。
※SEOで不利?とかで、最近はフレームを採用したページが減ったけど、SEO気にしないTOPページ以外は、証券会社の発注画面などで多く使われているみたいですね。
※※一画面に(1HTMLファイルに)、同じヘッダー・フッター、ロゴを読み込むよりは、フレーム分けして、内容だけ更新したほうがServerに負荷が少ないから、証券会社の発注ページではFrameを使ったページが多いのかなぁ?と勝手な予想。チリも積もればで、同じ内容をHttpで送信すると莫大な通信量になるし。
簡単な、基本の2分割から探ってみます
汚い手で女の子に触れると嫌がられる? じゃなくって、 いつも、私は手抜きで、AS Objectとやっているので、 なぜExcelもIEも同じAs Objectなのか?と質問 いっぱいもらうので、 今日は、皆さんが好きな、型をキチント指定して作ってみます。 自分で打ち込みながらやったほうが、力になるので(手抜きの言い訳ですが) まず、参照設定を行います。参照設定では、MicroSoft Internet Contorlsを選択します。 (※見つからない場合は Microsoft Browser Helpersがあると思うので設定してください) 次に、変数を宣言します。 dim objIE as と打ち込むと、リストから選択できます。 ここで、 Dim objIE As InternetExplorer と選択します。
↑選択イメージ そんな感じで、いつもの型が不明のObject型から、 As InternetExplorer と 型を指定してみました。 あとは、普通にオブジェクトを作って代入します。 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") まぁ、いつも通りですね。 参照設定をしていると、ここからチト違うのが、 objie.と打ち込むと、プロパティ、メソッドが表示されます。
objIE.Visible = True もコーディングするのが比較的楽です。 さてと、だったら、Excelのように簡単にいくかなぁ・・・ と思ってたら、ガイドしてくれるのもここまでで、 objIE.Document. ここまではOKなのに、 Document.と入力しても何も出てこない。 しかたない、F1押しますか、 あらら、いつものヘルプが出ない・・・ う〜ん、どうしましょう・・・
みなさんはF2のオブジェクトブラウザって使ったことありますか? F2を押します(F1の隣って、あたりまえか) すると、オブジェクトブラウザって画面が表示されると思います。 全てのライブラリから、 SHDocVwを選択します。 すると、 InternetExplorerのメンバーまでは見れるけどその先がまだ見れない・・・↑InternetExplorerのメンバーまでたどりついた。 まだ何か足りないのね、参照設定でそれらしき物を再度探す。 と、 MicroSoft HTML Object Labrary なんてのがあるじゃないですか。 ※いままで、見逃してた・・読者の皆さんスミマセン。
↑やっと探し当てた、MicroSoft HTML Object Labrary 中身を確認してみると、(F2のオブジェクトブラウザで) MSHTMLとライブラリを選択、 クラスは、HTMLDocumentを選択すると、 おっ、よく見かけた.Allなんかも出てくるし、 スクロールすると、 framesなんてメンバーが存在する。 ^^^^^^ これをクリックすると、 Property Frames AS FramesCollection 読み取り専用 HTMLDocumentのメンバ なんて感じの説明とリンクが出てくる。
↑HTMLDocumentのframesを選択した画面 まだまだ不明なので、 次に、リンク先のFramesCollectionをクリックして探ってみると、 Class FramesCollection MSHTML のメンバ だってぇ? オイオイ、頭に戻ったか?(循環参照か?ヘルプのたらいまわし状態?) でも、FramesCollectionは、 Item と length をメンバーとして持っているのがわかった。
↑FramesCollectionを選択した画面 Itemは、HTMLを表すのかぁ。 ^^^^^^^^^^^^^^^^^^^^^^^^^^ ※まぁ、よく考えてみれば、フレームの先はHTMLのドキュメントなので、 作りはOKなんでしょうね。 index.html でフレーム分割、 a.html と b.asp を表示してれば、 index.htmlのフレーム要素(ITEM)は2個(length)です。 ITEMの中身はHTMLドキュメントって言ってるよ、 そりゃそうか、フレームで分割されていても、 item(0)はa.html item(1)はb.aspなんだから、 フレームのアイテムは、HTMLドキュメントと言ってるのは。 ↑ゴメンなさい、少し文章変ですよね。
日本語、私、うまく書けないので、 みなさんと共通に話せると思う、 VBAって言語を混ぜて説明するので、 聞いてくださいね。 オイオイ(笑)単なるソースを紹介って言えよボケ。 簡単なIE関係の型を使った解説を始めます。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ まず、普通のフレーム無しのHTMLから。 http://www.ken3.org/cgi-bin/test/test068.html がログインの処理画面です。 ユーザー名にKen3 パスワードにaaa と入力してみます。 test068.htmlのHTMLソース(途中まで)は、 <html> <head> <title>けんぞうのへんてこな世界へようこそ</title> </head> <body bgcolor=#ffffff text=#000000> <center> <h2>けんぞうのへんてこな世界へようこそ</h2> <br> <table bolder=1> <FORM ACTION="test068-1.asp" METHOD="POST"> USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> </table><br> <a Href="test068-2.asp" TARGET="_top">新規ユーザー登録</a><br> </center> <br> ・ ・ と USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> が、入力エリアです。 これに対して、(このHTML入力フォームに対して) 入力処理で下記のプログラムを作りました。 No.105 VBAからIE操作 .document.forms(0).Submit でフォーム送信処理 http://www.ken3.org/vba/backno/vba105.html では、
Sub ie_test()
Dim objIE As Object 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
'文字列で指定したURLに飛ぶ
objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"
'表示終了まで待つ
Do While objIE.Busy = True
'何もしないループ(笑)
DoEvents
Loop
'項目名を指定して、データをセットする
objIE.document.all.userid.Value = "Ken3" 'ユーザー名
objIE.document.all.pass.Value = "aaa" 'パスワード
'フォームをSubmitする
objIE.document.forms(0).Submit
End Sub |
Sub ie_test()
Dim objIE As InternetExplorer 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
'文字列で指定したURLに飛ぶ
objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"
'表示終了まで待つ
Do While objIE.Busy = True
'何もしないループ(笑)
DoEvents
Loop
'ドキュメントオブジェクトの代入
Dim objDOC As HTMLDocument 'HTMLドキュメント
Set objDOC = objIE.Document
'項目名を指定して、データをセットする
objDOC.all("userid").Value = "Ken3" 'ユーザー名
objDOC.all("pass").Value = "aaa" 'パスワード
End Sub |
Sub ie_fream()
Dim objIE As InternetExplorer 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
'文字列で指定したURLに飛ぶ
objIE.Navigate "http://www.ken3.org/vba/test116.html"
'表示終了まで待つ
Do While objIE.Busy = True
'何もしないループ(笑)
DoEvents
Loop
Dim objFRAME As FramesCollection
Set objFRAME = objIE.Document.frames 'フレームの代入
Debug.Print "フレームの数は" & objFRAME.Length
'ドキュメントオブジェクトの代入
Dim objDOC As HTMLDocument 'HTMLドキュメント
Set objDOC = objFRAME("F_RIGHT").Document 'フレームのドキュメントをセット
'↑objFRAME(0).DocumentやobjFRAME(1).Documentもアリです
'Set objDOC = objFRAME(1).Document 'フレーム(1)をセットでも動きます
'項目名を指定して、データをセットする
objDOC.all("userid").Value = "Ken3" 'ユーザー名
objDOC.all("pass").Value = "aaa" 'パスワード
End Sub |
複数フレームの処理を書く
上下や左右の単純な2分割じゃなくて、証券会社のページは分割の分割・・になってます。
基本は、2分割の応用で、
ここからした、サンプルを作って、速めに書き込む
※現在作成中です、少々お待ちを。
入り口を間違えないで、みなさんは参照設定から行ってくださいね。
※まだまだ、確認すること、やることいっぱいだぁ。。。
ヘルプはどこにあるの?三流なのにどうやって資料を探しどこで勉強したの?
と、質問をいただきます。(自分で調べていきたい読者様の前向きな問い合わせです)
やはり本家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で楽しく] / [記事一覧] |