[VBAでIE操作(TOP)]
[IE関係記事一覧]
[IE関係ブクマ]
[三流君(TOP)]
[VBA(TOP)]
はじめは[WebBrowserを参照設定]から入り
小さな[IE操作のサンプル]でTEST
次に[少し大きなIEを使ったサンプル]
にチャレンジしたり
手探りで[ヘルプ IEのオブジェクトを探る]←迷ってみたり
よく使う.Document:の解説
[.Forms]で入力処理
[.Links]でリンク情報取得
[.Images]で画像の情報
[.Frames]でフレーム処理
[.Script]でスクリプト処理
IE,WebBrowser:
[IE プロパティ(各種設定)]
[IE メソッド(イロイロな動作)]
[IE イベント(発生後処理)]


三流君VBAでIE操作 フレーム操作 Document.Frames

挨拶:VBAで(ExcelやAccessなどから)InternetExplorer WebBrowserを操作してみたいと思います。
ここでは、最近見かけなくなった?フレームページの操作について、少し書いてみます。
※SEOで不利?とかで、最近はフレームを採用したページが減ったけど、SEO気にしないTOPページ以外は、証券会社の発注画面などで多く使われているみたいですね。
※※一画面に(1HTMLファイルに)、同じヘッダー・フッター、ロゴを読み込むよりは、フレーム分けして、内容だけ更新したほうがServerに負荷が少ないから、証券会社の発注ページではFrameを使ったページが多いのかなぁ?と勝手な予想。チリも積もればで、同じ内容をHttpで送信すると莫大な通信量になるし。


.Document.Window が正しい書き方みたいです。2012/02/23 追記・修正

先に

VB2010のWebBrowserを使いブラウザを操作したい。 VB2010を使用.. - 人力検索はてな
http://q.hatena.ne.jp/1314392493#a1097389
↑を見てください。
.Document.Window が 正しいみたいです。
下記の私のサンプルは、たまたま、動いていたみたい(ぉぃぉぃ)
たぶん、VBAで省略したプロパティを勝手に補完してくれたから?
※恥は、そのまま、残しておきます。


百聞は一見に〜、デバック風景

操作動画 http://www.youtube.com/watch?v=P-FC3baJkzo です。

↑こんな感じで、デバック、してます。※わかっててやっているから、で、いきなりこのコードは書けないんだけど、、、
元の質問、[QA20110523 VBA IE操作、フレームの操作をデバック] を見る

まずは、簡単な2分割から

簡単な、基本の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のオブジェクトブラウザって使ったことありますか?

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ドキュメントと言ってるのは。
 ↑ゴメンなさい、少し文章変ですよね。

フレーム処理に各Objectの型をキチント指定しながら挑戦

日本語、私、うまく書けないので、
みなさんと共通に話せると思う、
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
と、 '項目名を指定して、データをセットする objIE.document.all.userid.Value = "Ken3" 'ユーザー名 objIE.document.all.pass.Value = "aaa" 'パスワード みたいにセットしてました。 これを、 MicroSoft Internet Contorls MicroSoft HTML Object Labrary の 2つ参照設定を行い、 ~~~~~~~~~~~~~~~~~~~~ オブジェクト変数の型をキチント指定して書いてみます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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
ポイントは、 ~~~~~~~~~~~~ Dim objDOC As HTMLDocument 'HTMLドキュメント と、 HTMLのドキュメント型にしてから、 ^^^^^^^^^^^^^^^^^^^^ Set objDOC = objIE.Document で、IEのドキュメントを代入しました。 それから、参照は、 objDOC.all("userid") や objDOC.all("pass") のように、項目名で参照してみました。 フォームのコレクションに番号でアクセスするのと、 名前でアクセスするのに似てますね。 次は、フレームのチェック。 ^^^^^^^^^^^^^^^^^^^^^^^^^^ http://www.ken3.org/vba/test116.html に、フレーム用のHTMLを作りました。 <html> <HEAD> <TITLE>三流君 VBAで楽しくプログラミング</TITLE> </HEAD> <frameset COLS="160,*" FRAMEBORDER=1 BORDER=1 FRAMESPACING=0> <frame SRC="http://www.ken3.org/vba/menu-vba.html" NAME="F_MENU"> <frame SRC="http://www.ken3.org/cgi-bin/test/test068.html" NAME="F_RIGHT"> </frameset> </html> フレームの名称は、F_MENUとF_RIGHTで左右に割ってみました。 さてと、フレームは、 Property Frames AS FramesCollection だったっけ? コイツを使用して、
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
ポイントは、 ~~~~~~~~~~~~ Dim objFRAME As FramesCollection で、 フレーム用のオブジェクト変数を作成して、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Set objFRAME = objIE.Document.frames 'フレームの代入 で、フレームを代入 おまけで、 Debug.Print "フレームの数は" & objFRAME.Length と、.Lengthでフレーム数を表示して、 あとは、 'ドキュメントオブジェクトの代入 Dim objDOC As HTMLDocument 'HTMLドキュメント HTMLのドキュメントに、 Set objDOC = objFRAME("F_RIGHT").Document 'フレームのドキュメントをセット と "F_RIGHT"とフレーム名称を指定したフレームのドキュメントを代入してます。 objFRAME(0).Document objFRAME(1).Document など、番号で参照も可能です。 ※0から始まり、.Lengthでフレーム数がわかります。 こんな感じで、フレームは、 objIE.Document.frames だったんですね。 いろいろと型を指定して、代入して、遊んでみました。

孫フレーム、フレームの中でさらにフレーム

複数フレームの処理を書く
上下や左右の単純な2分割じゃなくて、証券会社のページは分割の分割・・になってます。
基本は、2分割の応用で、

ここからした、サンプルを作って、速めに書き込む
※現在作成中です、少々お待ちを。

逃げるように 終わりの挨拶

入り口を間違えないで、みなさんは参照設定から行ってくださいね。
※まだまだ、確認すること、やることいっぱいだぁ。。。



[#BackNoLink][ページ内のTOPへ戻る]

過去のメールマガジンのリンクが長かったので、下記に移動しました。
[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]

2012-03-19:[過去の解説 vba_ie_20120319.html]
もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))




[ページ内のTOPへ戻る]

ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

感想や質問・要望・苦情など 三流君へメッセージを送る。[#QA_MESSAGE]


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:



(感想や質問・要望・苦情はHPで記事に載せることがあります。)
例:[XXXXさんへ回答例]←みたいに回答していたり...

急ぎで連絡がほしい、そんな時は:[twitter三流君]に気軽に連絡してください。




[三流君(TOPへ)] / [VBAで楽しく] / [記事一覧]
カスタム検索




広告

リンク広告
  1. --[Windows 自動ログイン control userpasswords2 や netplwiz]
  2. --[【ガチャ】モンスト 3500万人記念!!オーブ0ガチャ]
  3. --[Access コンボボックスを使ってみた]
  4. --[ Windows10 OSのフルバックアップ システムイメージバックアップ]