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


IE操作 2007/05/20 三流君 過去のメモ

2007/05/20の更新前の状態を保存しておきます。
今の最新の解説は、
http://www.ken3.org/cgi-bin/group/vba_ie.asp
を見てください。
※ココから下のサンプル、XP+IE6の1つ前の古い環境で作成したメルマガです。そのまま動かない場合もありますが、何かの参考となれば幸いです。
読者様より、IE7対応で↓下記のサイトを勧めていただきました
www.happy2-island.com 7.1 IEオブジェクトを作る(IE7編)
↑IE7のオブジェクトの対応が丁寧に書いてありました。VBSだけど参考になると思います
※あと、毎日のようにIE操作はUWSCを使え とメッセージをいただくので、IE操作の人はUWSCもググってみては??
※※私もザボってないで、がんばらねば・・・ってことでやっと三流的なIE7対応方法として[Vista IE7対応に入る(ExcelのUserFormにIEコントロールを貼る)]をUPしました(2008/05/24)IE8の背中が見えてきたのに遅すぎ(ゴメンなさい)

読者より、下記の書き込みをいただきました。(2007/10/08 20:23:39)


MSHTMLに参照設定して、以下コードを実行すると、
WebBrowser1オブジェクトのDocumentオブジェクトに補完が聞きますよ。
その後、VB、VBAのオブジェクトブラウザでMSHTMLのActiveXに関する情報が手に入ります。
--
dim objHTML as MSHTML.HTMLDocument
set objHTML = WebBrowser1.Document
.....
set objHTML = Nothing
--
あと、デバッグ中にobjHTMLをウォッチすると、いろいろわかります。


我流の解説 VBAでIE操作

やっと解説の始まり?
まぁ、ここを読むだけじゃ厳しいと思いますが、入り口のひとつとしてお役に立てれば幸いです。

はじめは・・・CreateObject かな?

CreateObject("InternetExplorer.application")
にするか、フォームにIEのオブジェクトを埋め込むか?
まずは、ここからかな。
読者の心の声:イマイチ何?言ってんだか?わからないのですが・・・ 三流君の説明聞くより、コード見たほうがハヤイって?

CreateObjectは簡単で、


Sub ie_test()
    Dim objIE    As Object  'IEオブジェクト参照用
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)
End Sub
↑とにかくコレを貼り付けて実行してみてください。

↓IEの起動は、ここの解説がはじめの一歩として、わかりやすいと思う。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/mar06/hey0313.mspx
↑イロイロなサイズを指定して起動できたりするみたい。

過去のメルマガ参考記事:[IE起動 CreateObject("InternetExplorer.application")]
フォームにオブジェクトを貼った例:[フォームにIEのコントロールを貼る]←みたいなこともできます。

サンプルを走らせながらが一番いいのかなぁ? マニュアルや調査することも非常に大切なのですが、入り口で挫折しないためには、楽しくなくっちゃ???
サンプルを見ながら動かしていけば、なんとなく感覚がつかめてくるので、あとはエラー処理を含めた丁寧なプログラムを組んでいく、そんな感じがいいのでは???

サンプル IE_TEST.XLS→[IE_TEST.zip]を保存後、解凍して、IE_TEST.XLSを開き、テストしてみてください。

URLを開く(.open)じゃなくって、.Navigateなんですよ

CreateObject("InternetExplorer.application")なんて感じで、無事にIEのオブジェクトを作成できたら、次は指定したURLを開きたいですよね。
まぁ、文章でもなんでもたいていは開く処理が必要ですよね。

Workbooks.Open Filename みたいに.Open?
それとも、.URLOpen?
ハヤク、IEでURLを開くメソッドを教えろコラ!!

アナタ、先走りますねぇ、想像力豊かでガマン汁出てるよ(オイオイ)じゃなくって、メソッドの名前を勝手に.URLOpenとか創造するなんて先走り過ぎ。※まぁ、予測・予想する能力もプログラマーとしてはとても大切で必要なんですが・・・([愚痴系 No.181 TimeAddって関数を予想する力? ]を暇な時にでも読んでみてください)

感覚は文章やブックを開く感覚でURLを開くOpenなのですが、URLを開く命令は.Navigateです。
objIE.Navigate URLの文字列 って感じです。
私のブログ[http://ken3-info.blog.ocn.ne.jp/]を開く(飛ばす)には、
下記のような命令を書きます。(と言っても1行追加するだけですが)
Sub ie_test_Navigate()

    Dim objIE    As Object  'IEオブジェクト参照用
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定した文字列のURLを開く
    objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/"

End Sub
ねっ、簡単に目的のURLを開くことができたでしょ。
あとは、ここから、データをセットしたり、表示されているデータを自動で抜いたり、イロイロと操作の入り口に先っぽが入ったのかなぁ。(入り口が狭くて中が広い?まだまだ、奥が深いんだけど・・・?)

IEのdocumentオブジェクト .allを使ってhtml入力フォームにアクセスしてみた

指定したURLを開くことができたので、次はデータをセットしてみたいと思います。
試しに、[http://ken3-info.blog.ocn.ne.jp/test/2006/12/post_745c.html]← blogのコメントに名前と内容をセットしてみます。

Excelのブック・シート・セルへデータをセットする場合、下記のように
Sheets("Sheet2").Range("B3") = "B列3行目です"
Sheets("Sheet3").Cells(5, 4) = "y,x 5行目の4列です"
Sheets(シート名).Rangeや.Cellsでオブジェクトへアクセスしていると思います。 Htmlの入力フォームの場合、
<form></form>の間にある、<input>タグにデータをセットします。
まず、html内のソースを表示して<form>の中身を確認します。
テストのhttp://ken3-info.blog.ocn.ne.jp/test/2006/12/post_745c.htmlを確認すると、

	<!-- comment form -->
	<script type="text/javascript" src="/.shared-blogzine/js/comments.js"></script>
	<script type="text/javascript">hostName = '.blog.ocn.ne.jp';</script>
	
	<form id="comment-form"
		method="post" action="http://app.blog.ocn.ne.jp/t/comments">
		<input type="hidden" name="entry_id" value="6252955" />
		
		<div class="comments-open">
			<h2 class="comments-open-header">コメントを投稿</h2>
			<div class="comments-open-content">
						<div id="comments-open-data">
						<p>
							<label for="comment-author">名前:</label>
							<input id="comment-author" name="author" size="30" />
						</p>
						<p>
							<label for="comment-email">メールアドレス:</label>
							<input id="comment-email" name="email" size="30" />
						</p>
						<p>
							<label for="comment-url">URL:</label>
							<input id="comment-url" name="url" size="30" />
						</p>
						<p>
							<label for="comment-bake-cookie"><input type="checkbox"
								id="comment-bake-cookie" name="bakecookie" value="1" />
								この情報を登録する</label>
						</p>
					</div>
				<p id="comments-open-text">
					<label for="comment-text">コメント:</label>
					<textarea id="comment-text" name="text" rows="10" cols="30"></textarea>
				</p>
			</div>
			<div id="comments-open-footer" class="comments-open-footer">
				<input type="submit" name="preview" id="comment-preview" value="&nbsp;確認&nbsp;" />
				<input type="submit" name="post" id="comment-post" value="&nbsp;投稿&nbsp;" />
			</div>
		</div>
	</form>

と入力用のhtmlフォームが作られています。
入力したいinputエリア(名前とコメントが)
<input id="comment-author" name="author" size="30" /> <textarea id="comment-text" name="text" rows="10" cols="30"></textarea> から、name=XXXXと定義されてます。
このname2つを利用して、下記のようなプログラムでデータをセットすることができます
Sub ie_test_data_set()

    Dim objIE    As Object  'IEオブジェクト参照用
    Dim time2    As Date    '2秒待ちに使う。

    Dim strNAME    As String  '名前の入力
    Dim strCOMMENT As String  'コメントの入力
    
    'INPUTBOXでデータをもらう
    strNAME = InputBox("セットする名前は?", "", "鈴木 小林 田中 高橋")
    strCOMMENT = InputBox("Ken3へ一言?", "", "速く続きが見たい・・・コメントを書いて下さい")
    
    'IEを起動する
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く
    objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2006/12/post_745c.html"
    
    '手抜きで2秒待つ(読み込み待ちを単純に2秒とする)
    time2 = DateAdd("s", 4, Now()) '2--4秒後を計算する
    Do While True  '無限ループ
        DoEvents
        If time2 < Now() Then Exit Do  '2秒後に抜ける
    Loop
    
    '名前とコメントを転記(代入)する。
    objIE.document.all("author").Value = strNAME
    objIE.document.all("text").Value = strCOMMENT
    
End Sub
ポイントは、
objIE.document.all("名前")で、データにアクセスしています。
↑なんか、あっけないでしょ???
※単純にnameでアクセスできない時も多々あるのですが、入り口のサンプルなので許してね。
※※単純じゃない1つの例→[VBAからIE操作 NAMEが同じフォームの項目へデータをセットする]

.Clickを使ってボタン(投稿ボタン)を押してみた

データをフォームにセットできたら、次は、登録ボタン(投稿)を押したいですよね・・・
ボタンを押す、、、実は単純にオブジェクト.Clickだったりするんですよ。
htmlソースから投稿ボタンの場所を見ると、
<input type="submit" name="post" id="comment-post" value="&nbsp;投稿&nbsp;" />
となっていて、オブジェクトの名前が付いているので、
'投稿ボタンname="post"を単純に押してみた(.click)
objIE.document.all("post").Click 'Name="post"をクリック
こんな1行を入れてテストしてください。(下記、ほとんど同じだけど・・・)
Sub ie_test_投稿ボタンclick()

    Dim objIE    As Object  'IEオブジェクト参照用
    Dim time2    As Date    '2秒待ちに使う。

    Dim strNAME    As String  '名前の入力
    Dim strCOMMENT As String  'コメントの入力
    
    'INPUTBOXでデータをもらう
    strNAME = InputBox("セットする名前は?", "", "勉強中")
    strCOMMENT = InputBox("Ken3へ一言?", "", "XXXXX コメント 投稿ボタンを押したよ")
    
    'IEを起動する
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く
    objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2006/12/post_745c.html"
    
    '手抜きで2秒待つ(読み込み待ちを単純に2秒とする)
    time2 = DateAdd("s", 4, Now()) '2--4秒後を計算する
    Do While True  '無限ループ
        DoEvents
        If time2 < Now() Then Exit Do  '2秒後に抜ける
    Loop
    
    '名前とコメントを転記(代入)する。
    objIE.document.all("author").Value = strNAME
    objIE.document.all("text").Value = strCOMMENT
    
    '投稿ボタンを単純に押してみた(.click)
    objIE.document.all("post").Click  'Name="post"をクリック
End Sub
※まぁ、ボタンに名前が付いていたりして、意外とらくでしたね。
でも、htmlのformで、ボタンに名前なんて付いていないことが多いです。
そんな時は→[VBAからIE操作 .document.forms(0).Submit でフォーム送信処理]をみて参考となれば・・・

.Busy = True の間、読み込み完了を待ってみる

上のデータセットのサンプル、回線の状態(オフラインとか)やテストで使用しているocn blogの反応が鈍いとエラーになるよね。。。

手抜きで、2秒待つ・・・とか言ってるけど、2秒ぐらいじゃ準備不足でエラーになる場合が多いよ。※特にオフラインで回線からつなげに行くと2秒で読み込み完了にならないよ。
じゃ、余裕を見て、倍の4秒待ってみたら?相手のサイトによって待つ時間を工夫してくださいね。
オイオイ、本気かよその回答?

自分勝手に挿入(データを)するんじゃなくて、相手が準備OKが確認してから入れろよ(データを)。イタイだろ、わかったかボケ。この、2秒だとか、5秒待ちとか言ってる○○野郎。

まぁ、まぁ、サンプルを走らせて、オブジェクトが見つからないとエラー画面が表示されたからって興奮しないでよみんな。
確かに相手の準備時間が状況によって変わる、そんな時、ありますよね。
ってことで、相手の状態を少し見て(プロパティを見て)、読み込み完了、準備OKを待ってみたいと思います。

前置きが長かったけど、そんな時に便利なのが、
.Busy プロパティかなぁ。
Busy(忙しい?) True→忙しい、動いてる False→ヒマ、止まっている
単純に、objIE.Busy = Trueの間、ループで待ってみました。
Sub ie_test_busy()

    Dim objIE    As Object  'IEオブジェクト参照用

    Dim strNAME    As String  '名前の入力
    Dim strCOMMENT As String  'コメントの入力
    
    'INPUTBOXでデータをもらう
    strNAME = InputBox("セットする名前は?", "", "勉強中2")
    strCOMMENT = InputBox("Ken3へ一言?", "", ".busy で待ってから ボタンを押したよ")
    
    'IEを起動する
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く
    objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2006/12/post_745c.html"
    
    '表示終了まで待つ
    Do While objIE.Busy = True
        DoEvents  '何もしないループ(笑)
    Loop

    '名前とコメントを転記(代入)する。
    objIE.document.all("author").Value = strNAME
    objIE.document.all("text").Value = strCOMMENT
    
    '投稿ボタンを単純に押してみた(.click)
    objIE.document.all("post").Click  'Name="post"をクリック
End Sub

まぁ、この objIE.Busy = True だけじゃ、ダメな時も多々あるんだけど・・・
ここまでのサンプル IE_TEST.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IE_TEST.zip]をzipを保存後、解凍して、テストしてみてください。

※まだまだ、書きかけ、内容をまとめていく予定・・・


チョット、はじめの一歩が長すぎましたね。ここからドキュメントの探りやプロパティ、メソッド、イベント・・・と先は長いんだけど。


ken3.org 掲示板の過去LOG→:[保存された過去ログを見る]

[#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]
もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))



中刷り広告???(オイオイ)

読者からのお勧め本。私はまだ購入していないのですが、下記の
[自動売買ロボット作成マニュアル~エクセルで理想のシステムトレード]
が参考になった三流君も見習って株のソフトを作ってくださいと多数(と言っても3人)に言われました。
株の自動売買ソフトかぁ・・・みなさん夢がありますね。。。
※追加情報(2006/11/08)、各証券会社にあわせたVBA IEコントロールの発注方法などは載っていないみたいです。本を買っただけではわからない・・と読者からお叱りを受けました。
※※メールで送られてくる質問の多数は株と競馬の自動データ処理なので、新たに解説ページを別で作ろうかなぁ・・・と思いつつ、具体的な予定は無かったり・・・はやく動き出せ、動けよコラ、三流プログラマーはこれだから と 自分自身に言ってみた。

読者からのお勧め本その2私はまだ購入していないのですが(またカヨ)、下記の
[VBAマクロで作る株式自動売買プログラム(仮)]
のタイトルが気になったので三流君も買ってみたら?と言われました(と言っても1 人ですが、、)
たしかに、タイトルに惹かれますね。あとは中身のチェックかな。
※じゃなくって、ポツポツIEを使った自動処理の本が出ているってことは、私は波に乗り遅れたかなぁ、、、今から証券口座を申し込んで作成を始めても遅いか。(そもそも、今から勉強して素人が株デビューするには時期が悪い?それとも?)

読者さんから、株の全自動売買MLの紹介。
>中刷り広告のコラムで、VBAによるIEの自動操作での
>株発注などのお話が出ておりました。
>
>この件は、私も興味があり、すでにメーリングリストを
>開設して日々勉強している所です。
>
>よろしければ、私のHPにメーリングリストの解説など、
>ございますので、一度ご覧になって頂ければ嬉しい限りです。
>
>http://www.geocities.jp/kameyama_kabu/
>
>メーリングリスト内では、
>VBAのソースもかなりの証券会社のものが、
>公開されており(フリーです)有効に使用されている方も
>いらっしゃいます。
>
>もし、コラムのような方が今後も多いようでしたら、
>メーリングリストを紹介して頂けると嬉しいです。

----
と、メールをいただきました。ますます私は出遅れているなぁと感じつつ、 メールを紹介しました。※興味のある方は、MLに参加されてみては??

広告

リンク広告
  1. --[ポコロンダンジョンズ ポコダンの再生リスト]
  2. --[パズドラ セラフィス降臨 パズル&ドラゴン]
  3. --[ Windows10 OSのフルバックアップ システムイメージバックアップ]
  4. --[Access コンボボックスを使ってみた]


[ページ内のTOPへ戻る]

ページフッター

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

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


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

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



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

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




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