[三流君(TOPへ)] −−> [VBAで楽しくプログラミング] −−>

三流君VBAでIE操作 InternetExplorer.Applicationを操作する

2008/05/01 までに書いた IE関係の記事です。あと少ししたらIE8になるのに?IE6+XPがメインの記事です・・・(IE7を攻略する前にIE8になっちゃったりして・・・)
現在の解説は、
http://www.ken3.org/cgi-bin/group/vba_ie.asp
↑を見てください。

2008/05/01 の記事

VBAで(ExcelやAccessなどから)IEを操作してみたいと思います。
操作方法の入り口として何かの参考・お役に立てれば幸いです。

※ココから下のサンプルそのままでは、Vista IE7の最新環境では動きません、XP+IE6の1つ前の古い環境だと動きます。失敗談↓
[Windows Vista IE7 + Excel2007 で起動(.Navigate)の失敗]

手前味噌の対策、とてもお勧めできないけど一番手軽なのが↓
[Vista IE7 信頼済みのサイトにしてVBAからコントロールしてみた]
↑いくら目的のサイトだからって、セキュリティを変更するとマズイし気分が悪いよね
で、2つ目の案は、三流的ないつもの発想ですが、ExcelのUserFormにIEを貼り操作する(代入する)そんな方法で、IE7 への 対応・逃げ手を考えてみました・・・
[ExcelのUserFormにIEを貼り操作]
ExcelのフォームにIEを閉じ込めてしまうとExcel2007+IE7でも動きます。なんか小細工だけど・・・

もっといい対策として、読者様より、↓下記のサイトを勧めていただきました
7.1 IEオブジェクトを作る(IE7編)
↑IE7のオブジェクトの作り方が丁寧に書いてありました。起動されているIEを探す方法です。識者に感謝ですね。
※私もザボってないで、がんばらねば・・・
※※あと、毎日のように(最近はもらいませんが)IE操作はUWSCを使え とメッセージをいただくので、IE自動操作の人はUWSCとIE操作のキーワードでググってみては??

Ken3の連絡先:[メールアドレス・ソフトバンク携帯番号]です。


XP + IE6 の サンプル

インターネットエクスプローラーの操作と一口に言ってもイロイロな操作があると思います。
そのうちの一つが、あるホームページ(URL)を表示して、フォームにデータをセットして登録ボタンを押す、この一連の流れを自動で行いたい・・・と日本語で書くのは簡単なんだけど、この流れをプログラムで記述してみたいと思います

初めの一歩・とっかかりとして、
試しに作ったフォーム、[http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html]← の感想エリアにデータをセットしてみます。
↓下記、htmlフォームのソースです。

<FORM ACTION="http://www.ken3.org/cgi-bin/test/test029-3.asp" METHOD="POST">

<b>感想:</b>
<INPUT TYPE="TEXT" NAME="MEMO" SIZE=20><br>

<b>メルマガ区分選択:</b><br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="ASP">三流君ASPで遊ぶ<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="VBA" CHECKED>三流君VBAで楽しく<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="GUCHI">プログラマー愚痴<br>

<INPUT TYPE="HIDDEN" NAME="NO" VALUE="0">

<INPUT TYPE="SUBMIT" VALUE="書 込">
<INPUT TYPE="RESET" VALUE="クリア">
</FORM>
<hr>

↑みたいな感じで、簡単な入力用のhtmlフォームが作られています。

この入力フォームの感想エリアにデータをセットしてみたいと思います。

事前準備

VBAから、IEを操作する・・・と簡単に書いてますが、まずは事前準備から。
深呼吸して心を落ちつかせます(ウソ)
初めは、操作したいホームページを自分で(手作業で)操作して、処理のイメージをつかみます。
今回のターゲット → [http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html]を開いて、手動でデータを入力したり、ボタンを押して、動きをチェックします

手動で操作のイメージをつかんだら、
次に、html内のソースを表示して<form>の中身を確認します。
いきなり、中身とかソースとか言われてもなぁ・・・頭の中?だらけだよ。
あっ、すいません、自分だけわかってて相手のこと考えて無くて。
目的の入力フォームの構造が知りたいので、目的のページを表示後、
表示--ソースとするとhtmlやcgiの中身を手作業ですが確認できます。
[ソースの確認画面イメージ] ← 単純にIEのメニューから表示させているだけですが
※↑フレームやJavaScriptで細工されたページ、文字コードが違って化け文字になっている・・・など簡単に表示できない場合もありますが

繰り返すと、
・手作業で自動化したい操作を行ってみる。
・ソースを表示して、入力フォームや構造のチェックに使う準備をする
まずは、この2点です。

データセットとデータ送信(Submitボタン)のサンプル

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

と、三流解説者がやり易い方法で解説を進めます(読者の立場は無視かよ???)

下記がデータセットのサンプルプログラムです(いきなりカヨ)
Sub ie_test_DATASET()  'データセット後 Submitボタンを押す

    Dim objIE      As Object  'IEオブジェクト参照用
    Dim strCOMMENT As String  'コメントの入力
    
    'INPUTBOXでデータをもらう
    strCOMMENT = InputBox("何か一言コメントを入れてください")
    If strCOMMENT = "" Then
        MsgBox "何か文字を入れてくださいね"
        Exit Sub  '途中で抜ける
    End If
    Application.WindowState = xlMinimized  '入力後Excelを最小化、下に下げる

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

    '.Navigate で 指定したURLを開く
    objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html"
    
    '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。
    objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
    
    'フォーム(0番目)を .Submit する
    objIE.Document.Forms(0).Submit   '送信処理
End Sub
サンプル IETEST003.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IETEST003.zip]を保存後、zipを解凍して、テストしながら、下記の解説を読んでみてください。
いきなり、サンプルを掲載して、みなさん?マークだと思いますが、ポイントを1つ1つ書いていきます。

手作業の操作を忘れずに・・・

手動で操作した時の操作を今一度思い出してください。
まず、コンピュータの電源を入れて、ログインする(ここからやるのカ?)
・インターネットエクスプローラーを起動して、
・URLを入力(ショートカットやお気に入りの人も居るかなぁ)
・入力フォーム(画面の表示)を確認
・マウスやキーボードを使ってデータを入力したり選択する。(データの入力)
・送信ボタン を 押す
だいたいこんな感じかな。
わかってんだよ、しつこいなぁ、ハヤク コードの解説始めろよ※クドクてシツコイ男は嫌われるぞ

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
↑とにかくコレを貼り付けて実行してみてください。
CreateObject("InternetExplorer.application")でIEを起動させobjIEの変数に代入して、objIE.Visible = True 他のVBAでもおなじみの.VisibleプロパティをTrueにしてます。
読者の声:一言で言えよ、起動して可視(見えるように)しただけだろ。

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を開くことができたでしょ。
読者の声:だから一言で言えよ .Navigate URL文字列 でOKだろ。説明が無駄に長いんだよ。

表示の完了を待つ

次は、ページが表示されるのを待ちます。
    '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
なぜ、待つかと言うと、いきなり入れるとイタイでしょ?(オイオイ、何言ってんだおっさん)
表示待ちを入れないで いきなりオブジェクトに触りに行くと(フォームなどのオブジェクトにアクセスすると) 相手の心の準備ができていないみたいで(オブジェクトの展開処理が間に合わないみたいで)、どこ触ってんだよと怒られるじゃなかった、 実行時エラー Document メソッドは失敗しました ・・・など、エラーで怒られるんですよ。
エラーの画像→[http://ken3-info.blog.ocn.ne.jp/screen/2007/05/ie__debe.html]
なので、objIE.Navigate 後に相手の準備ができるが確認します。

IEのdocumentオブジェクト formを使ってhtml入力フォームにアクセスする

指定したURLを開き、相手の受け入れ準備も確認できたので、次はデータを挿入してみたいと思います。

入力したいinputエリアは、
<INPUT TYPE="TEXT" NAME="MEMO" SIZE=20><br>
の部分です。 name=XXXX(NAME="MEMO")と定義されてます。
このnameを利用してオブジェクトを表現するには、どうするのだろう?

先走らないでここで深呼吸、一呼吸おいて、
Excelのブック・シート・セルへデータをセットする場合、下記のように
シート--範囲
Sheets("Sheet2").Range("B3") = "B列3行目です"

シート--セル(y,x)
Sheets("Sheet3").Cells(5, 4) = "y,x 5行目の4列です"
Sheets(シート名).Rangeや.Cellsでオブジェクトへアクセスしていると思います。 Htmlの入力フォームの場合、オブジェクトの階層構造が
IEアプリ--ドキュメント--フォーム--アイテム(項目)
で表すことができるので(ほかにも表現方法はあるのですが今回はこれで)
objIE.Document.Forms(0).Item("MEMO").Value = 値
htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。って感じです。
下記のような感じでデータをFormのMEMOにセットすることができます
'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。 objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
ポイントは、
Excelなら、アプリ -- ブック(Book) -- シート(Sheet) -- セル(Cells)
のオブジェクト階層が、
アプリ -- html(Document) -- フォーム(Form) -- 入力エリア(A INPUT)
objIE.Document.Forms(0).Item("MEMO").Value
みたいな感じです。
読者の声:なんとなくわかってきたけど、こんなのヘルプに無いし、どこで調べるんだよ??
あっ、これですか・・
英語だけどMSDNの下記の項目を見るとオブジェクトの階層構造がわかりやすいと思います。
Reference for Visual Basic Developers [http://msdn2.microsoft.com/en-us/library/aa752043.aspx] が 一覧で、その 下に、
document Object [http://msdn2.microsoft.com/en-us/library/ms531073.aspx] をクリック 後に、
Collections を探っていくと、
forms Collection [http://msdn2.microsoft.com/en-us/library/ms537457.aspx] オブジェクトがあります。
※数をこなしていくと感覚がわかると思います。
※※過去のメルマガ→[VBAからIE操作 NAMEが同じフォームの項目へデータをセットする]も見てください

.Submit メソッドを使って フォームの送信動作

挿入(データをフォームにセット)できたら、次は、送信ボタン(投稿)を押したいですよね・・・
単純に該当フォームを.Submitなんてメソッドで できちゃったりするんですよ。
※オブジェクト.動作(メソッド) ってイメージかなぁ。

objIE.Document.Forms(0).Submit
こんな1行で、送信処理ができてしまいます。

読者の声:だからさっきから質問してるでしょ、.Submit ? Form ? F1押して表示されるExcel VBAのヘルプにそんなの一言も載ってないよ

う〜ん、、、また怒られそうですが英語のMSDNを紹介します。
FORM Element | form Object [http://msdn2.microsoft.com/en-us/library/ms535249.aspx]
のメソッドの中に
submit [http://msdn2.microsoft.com/en-us/library/ms536771.aspx] があります。
※過去のメルマガ→[VBAからIE操作 .document.forms(0).Submit でフォーム送信処理]も見て参考となれば・・・

ここまでのサンプル IETEST003.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IETEST003.zip]をzipを保存後、解凍して、テストしてみてください。

過去の解説はこちら→ [過去の解説 vba_ie_20070831.asp] [過去の解説 vba_ie20070520.asp] もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))

リンクを取り出す サンプル .Document.Linksを触る

商品一覧や売れ筋ランキングなどから、リンク先を取り出し、自分のID付きの広告コードを作成する

リンク先が動的に変わる、、、そんな場合に使いたいオブジェクトが.Document.Linksかなぁ。

読者の声:.Document.Links ? アンタまたわけわかんないオブジェクトをイキナリくちばしるね?自分だけわかってて、相手のこと考えたことあるの??説明の順番、上のデータセット解説から次はリンクでいいの?もっと違う方向性・説明の順番があると思うけどなぁ。。。オレ、スパム的な広告を大量に作る予定無いし、金の亡者じゃないし。

まぁまぁ、そんなこと言わないで、広告のリンクを作らなくても、
.Lengthの話 2. For Eachの話、3. InnerHTMLやInnerTEXT.OuterHTMLや.OuterTEXTの違いだけでも、この3点だけでも聞いてくださいね。

と、いつもの小芝居は置いといて、表示したHP(ドキュメント)のリンク先が.Linksオブジェクトに保存されています。この.Document.Linksを操作して、IEドキュメント操作の感覚をつかんでもらう、それが狙いなのでよろしくお願いします。
読者の声:だったら素直に書けよ、スパムとか金の亡者とか変な単語書いて煽るから誤解されるんだっばさ。

問題のLinkはAタグなので、MSDNでみるにはココ、
アクセス可能な HTML 要素 [http://www.microsoft.com/japan/msdn/workshop/author/access/accessibility.aspx#acc_elements] をクリック 後に、
Aタグ を探っていくと、
A Element | a Object [http://msdn2.microsoft.com/en-us/library/ms535173.aspx] が見つかります。
ここにイロイロと使えそうなプロパティやメソッドがありそうです。ワクワクしませんか?

読者の声:あっそ、でも英語でしょ?日本語の解説無いの?

冷めてるなぁ、、、でも、いっぱいあって何を使えばいいのか・・・いきなりこんなの見せられたら挫折しますね。
なので、私が使っている(知っている)プロパティを使って、テストプログラムを書いてみました。

読者の声:はじめから知ってるコマンドだけ解説します・残りは自分で探してくださいと言えよ?全て丁寧に解説してくれるものだと期待するでしょ

スミマセン、、、と、落ち込みつつ、リンクを取り出すサンプルを作成します
動作は、IE起動後、テスト用のBlog[http://ken3-info.blog.ocn.ne.jp/test/2007/09/post_fcf4.html] を開き、表示完了を待ってから、含まれているリンク情報をセルに書き出し、IEを終了させてみます。
Sub ie_test_Link_TEST()

    Dim objIE As Object  'IEオブジェクト参照用
    Dim i     As Integer '添え字 i番目などで使用
    Dim yLINE As Integer '行カウンタ、Y行目
    
    '15行から9999行を削除する 前回の結果データを消す
    Rows("15:9999").Delete
    
    'IEを起動する 初期処理
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く テストエリアを開く
    objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/09/post_fcf4.html"

    '表示終了まで待つ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'html ドキュメント リンク オブジェクトからデータをセルへ転記(代入)する。
    yLINE = 15  'セット開始の行を代入する
    For i = 0 To objIE.Document.Links.Length - 1
        'データをセルへセットする
        Cells(yLINE, "A") = "'" & objIE.Document.Links(i).Href
        Cells(yLINE, "B") = "'" & objIE.Document.Links(i).OuterText
        Cells(yLINE, "C") = "'" & objIE.Document.Links(i).OuterHTML
        Cells(yLINE, "D") = "'" & objIE.Document.Links(i).InnerText
        Cells(yLINE, "E") = "'" & objIE.Document.Links(i).InnerHTML
        Cells(yLINE, "F") = "'" & objIE.Document.Links(i).Target
        
        yLINE = yLINE + 1 'セット位置(行)を+1する
    Next i
    
    '抜き出し作業が終わったので、IEを終了させる
    objIE.Quit
    Set objIE = Nothing
    
End Sub
サンプル IETEST004.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IETEST004.zip]をzipを保存後、解凍して、テストしてみてください。

Links.Lengthでデータ数 添え字 Links(i) でアクセス

バカの一つ覚えのExcelとの比較を一つ、ブック内のシート名を表示するテストプログラムを書きます。
Sub TEST_SHEET_NAME()
    'シートの名前をテストで表示する
    Dim i As Integer   'カウンター、添え字
    
    For i = 1 To ActiveWorkbook.Sheets.Count
        MsgBox i & " シートの名前 " & ActiveWorkbook.Sheets(i).Name
    Next i

End Sub

ActiveWorkbook.Sheets.Count
で、ブックのシート数が取れるので、ループで1からシート数分まわし、
ActiveWorkbook.Sheets(i).Name
で、i番目のシートの名前(.Name)を表示してます。

読者の声:だから何?、ドキュメント内のリンク数は、objIE.Document.Links.Countと言いたいの?感覚的にExcel VBAに慣れた人は.Countを使うと決め付けたいの??でも、リンクの数は.Lengthなんでしょ?

あまり怒らないでくださいよ、リンクの数(要素の数)は.Countじゃなくて.Lengthです、配列も0から始まるので、
For i = 0 To objIE.Document.Links.Length - 1
Cells(yLINE, "A") = "'" & objIE.Document.Links(i).Href


Next i
と、i=0から初めて、.Length - 1までのループとしてます
他のIEオブジェクト操作でも 配列の要素数は、パターン的に.Lengthが多いので覚えておいてください・・それが言いたかっただけなんですが、Excelを例にしてた蛇足の解説でしたね(少々反省)

読者の声:蛇足でも何でもいいから、ハヤク、次行け?

.Href .OuterText .OuterHTML .InnerText .InnerHTML .Target

ドキュメント内 リンクのオブジェクト に
objIE.Document.Links(i番目)
で、アクセスできた(できる)ので、私が使ったことがあるプロパティをセルに書き出してみました。↓単純に縦に羅列しただけですが
Cells(yLINE, "A") = "'" & objIE.Document.Links(i).Href
Cells(yLINE, "B") = "'" & objIE.Document.Links(i).OuterText
Cells(yLINE, "C") = "'" & objIE.Document.Links(i).OuterHTML
Cells(yLINE, "D") = "'" & objIE.Document.Links(i).InnerText
Cells(yLINE, "E") = "'" & objIE.Document.Links(i).InnerHTML
Cells(yLINE, "F") = "'" & objIE.Document.Links(i).Target
実行結果を見ると、各プロパティの違いがわかると思います

読者の声:わかるわけねぇだろコラ。また、自分だけ気持ち良くなってんじゃねぇよ。。。InnerとOuterHTMLとTEXT どこが違うんだよ。

スミマセン、手抜きの解説で、少々いつものようにくどく書くと下記のリンクのAタグがあります
<A href="http://www.ken3.org/" target=_blank><Big><STRONG>三流</STRONG>プログラマー</Big></A>
↑のデータを例にすると、
.Href は リンク先URL http://www.ken3.org が値として取り出せます。
.Target は _blank (見たまんまか)
.OuterText と .InnerText は タグの付いてないテキスト文字列 三流プログラマー を値として取り出せます
.OuterHTML は、外側のタグを含むHTML <A href="http://www.ken3.org/" target=_blank><Big><STRONG>三流</STRONG>プログラマー</Big></A> です。あっ、そのまま全てか(笑)
.InnerHTML で タグの内側 <Big><STRONG>三流</STRONG>プログラマー</Big> 外側を1つはずした感じかな の データを受け取れます。

.OuterText .OuterHTML .InnerText .InnerHTMLは、他のタグでも使うことが多いので、なんとなくでもいいので頭のスミにでも覚えておいてください。

処理が終わったので IEを .Quit で閉じてみた

今回のリンク抜き出し処理にはあまり関係ないのですが、
objIE.Quit
.Quitで、Set objIE = CreateObject("InternetExplorer.application") で作成した IEを終了、閉じることができます。
開発中やデバッグ中はIEをそのまま残しておいたほうが何かと便利なのですが、処理が終わったら.Quitでサヨナラをすることもできます。

(i)で参照 から For Each に 変更

よし、リンクオブジェクトの説明終了、、、朝までにもう一軒飲み屋じゃなかった、オブジェクトをハシゴするぞと行きたい所ですが、あと一杯、少しだけお時間をとらせてください。

読者の声:だから、余計な会話はいいから、はやくシロ。(※←この読者の心の声もかなりの蛇足なんですが(笑)説明に必要ないでしょと思いつつ)

書き方に好みの問題もあるのですが、
objIE.Document.Links(i)
と、配列(i番目)でまわす方法のほかに、
For Each 変数 In オブジェクト
なんて書き方もあります

読者の声:何言ってんだか、よくわからん。いつもの例だせよ

えっ、いいんですか?いつもの蛇足の例を出して。では、お言葉に甘えてExcelのシートを例にして、
Sub TEST_SHEET_NAME_FOR_EACH()
    Dim objSHEET As Worksheet  'シートのオブジェクト受け取り用
    For Each objSHEET In ActiveWorkbook.Sheets
        MsgBox " シートの名前 " & objSHEET.Name
    Next
End Sub

みたいに、Dim objSHEET As Worksheetと受け取り用の変数を1つ定義して、 For Each objSHEET In ActiveWorkbook.Sheets
と記述すると、ActiveWorkbook.Sheets分だけ1つ1つ次のオブジェクトを取り出しながらループさせ、objSHEET.Nameみたいに(i)とか添え字や.Countなどの要素数を使わないで処理することができます。
頭から全てのデータをループさせる場合、このほうがスッキリとした記述かなぁ。
※三流君的には、(i)とか(n)、の書き方が好きだけど。

スッキリさせると言えば、せっかくリンクのテストプログラム作ったのに調べるURLによって毎回モジュール内の
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/09/post_fcf4.html"
URLの文字列を直接変更してからテストするなんて、汎用性が無いので、せっかくExcelを使っているのだから、B10のセルに調査したいURLを保存(入力)してもらい参照するように変更してみます。あと、.Quitも終了させるか最後にユーザーに聞く感じに変更してみます。↓こんな感じに変更してみました。
Sub ie_test_LinkDATASET()
    'IE ドキュメント リンク オブジェクトのテスト

    Dim objIE As Object  'IEオブジェクト参照用
    Dim objA  As Object  'リンクのAタグ
    Dim yLINE As Integer '行カウンタ、Y行目
    
    '15行から9999行を削除する 前回の結果データを消す
    Rows("15:9999").Delete
    
    'IEを起動する 初期処理
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く セルB10に入力したアドレスを開く
    objIE.Navigate Range("B10").Text  '指定されたURL(B10に入力)へ
    
    '表示終了まで待つ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'html ドキュメント リンク オブジェクトからデータをセルへ転記(代入)する。
    yLINE = 15  'セット開始の行を代入する
    For Each objA In objIE.Document.Links
        'データをセルへセットする
        Cells(yLINE, "A") = "'" & objA.Href
        Cells(yLINE, "B") = "'" & objA.OuterText
        Cells(yLINE, "C") = "'" & objA.OuterHTML
        Cells(yLINE, "D") = "'" & objA.InnerText
        Cells(yLINE, "E") = "'" & objA.InnerHTML
        Cells(yLINE, "F") = "'" & objA.Target
        yLINE = yLINE + 1 'セット位置(行)を+1する
    Next
    
    '後始末
    If MsgBox("IEを閉じますか?", vbYesNo) = vbYes Then
        objIE.Quit  '処理が終わったので、IEを終了させる
        Set objIE = Nothing
    End If

End Sub
↑、こっちのほうが少しはプロっぽい感じになったのかなぁ。
For Each objA In objIE.Document.Links
objA.Href
と、objIE.Document.Links(i).Hrefよりは、スッキリしたかなぁ。
サンプル IETEST004.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IETEST004.zip]をzipを保存後、解凍して、テストしてみてください。

読者の声:手前味噌って言葉を辞書で調べろよ・・

やっと Document.Body の解説に入る(.Bodyへアクセスする)

HTMLの入力フォーム FORM には、
objIE.Document.Forms(0).Item("MEMO").Value = 値
で値をセットしたり、
objIE.Document.Forms(0).Submit
で、送信のアクションを起こしたり、
HTMLのリンク は .Document.Links にアクセスして、
.Document.Links(n).Href でリンク先URLや
.Document.Links(n).InnerTEXT で文字を取り出したりしました。

解説の順番がなってない・・と、識者の人達にお叱りを受けそうですが、やっとボディタッチじゃなかった、Document.Body オブジェクトを触ってみたいと思います。
※女性読者の声?:タッチとか触るとか あと 所々に出てくる変な言葉遣い止めてもらえます?感じ悪いので、、、

数少ない、女性読者に嫌われたところで、めげずに続けます。(少々反省、文章は的確に短くがプログラマーさん達にウケルのかなぁ、変な蛇足はメモリや時間の無駄??)

.Document.Body.Allを使い 1つ1つアクセスする

いつものようにいきなりサンプルを見せる解説を始めます、下記のプログラムをExcelで走らせて見てください。
Sub ie_test_Ken3org_BODY_ALL()
    'ken3.org IE ドキュメント BODY ALL オブジェクトのテスト

    Dim objIE As Object   'IEオブジェクト参照用
    Dim n     As Integer  'カウンター
    Dim yLINE As Integer  '行カウンタ、Y行目
    
    '15行から9999行を削除する 前回の結果データを消す
    Rows("15:9999").Delete

    'IEを起動する 初期処理
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く
    objIE.Navigate "http://www.ken3.org/"  'URLを開く
    
    '表示終了まで待つ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'html ドキュメント BODY オブジェクトからデータをセルへ転記(代入)する。
    yLINE = 15  'セット開始の行を代入する
    For n = 0 To objIE.Document.Body.All.Length - 1
        'データをセルへセットする
        Cells(yLINE, "A") = yLINE - 15 'n番目を計算でセットする
        Cells(yLINE, "B") = "'" & TypeName(objIE.Document.Body.All(n)) 'TypeNameでオブジェクトのタイプを表示
        
        Cells(yLINE, "C") = "'" & objIE.Document.Body.All(n).TagName   'タグの名前
        Cells(yLINE, "D") = "'" & Left(objIE.Document.Body.All(n).OuterHTML, 256) '頭から256文字だけセット
        Cells(yLINE, "E") = "'" & Left(objIE.Document.Body.All(n).InnerText, 256)
        Cells(yLINE, "F") = "'" & Left(objIE.Document.Body.All(n).InnerHTML, 256)

        yLINE = yLINE + 1 'セット位置(行)を+1する
    Next
    
    '後始末
    If MsgBox("IEを閉じますか?", vbYesNo) = vbYes Then
        objIE.Quit  '処理が終わったので、IEを終了させる
        Set objIE = Nothing
    End If

End Sub

↑サンプル IETEST005.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IETEST005.zip]をzipを保存後、解凍して、テストしてみてください。

ポイントは、Document.Body.All(n)でn番目のタグのデータを取得することができます。
.Document.Body.All.Length で、オブジェクトの数がわかるので、0から始めて To −1までのループを下記のように作りました。
For n = 0 To objIE.Document.Body.All.Length - 1
あとは、オブジェクト Document.Body.All(n)に対して操作してください。
TypeName関数に渡し、HTMLHeaderElement や HTMLTable などを表示したり
Document.Body.All(n).TagName で n番目のタグの名前、H1やP,TABLEなどを表示
Document.Body.All(n).OuterHTML や .InnerText で 中身のデータを表示しています※ここでは、セルにセットするために256文字でカットしてますが、実際は全てのデータを取得することができます。
少し使いにくいですが、頭から1つ1つタグをたどっていく場合などでDocument.Body.All(n)のループを使ってみてください。

あっ、もちろん、For Each In の書き方で、
For Each objA In objIE.Document.Body.All
objA.TagName や objA.InnerText みたいに書くこともできます。

読者の声:私、Excel持ってないのですが・・・みんながExcel VBAが使える環境にあると決め付けて解説しないで下さい。(※2人から実際にTELで「エクセル持ってない」と言われました)
あっ、スミマセン・・・、サンプルが私が使い易いExcel VBAを基準にしてて、、、三流解説ってことでご勘弁を(今後もExcelのサンプルで続けます、スミマセン)
今回の実行結果は↓のような感じです。
Item(n) 番目	TypeName	.TagName	.OuterHTML
0	HTMLHeaderElement	H1	"
<H1>AB型の変わり者 三流プログラマー Ken3のHP</H1>"
1	HTMLParaElement	P	"
<P>AB型の変わり者、三流プログラマーKen3がいろいろと書いてます。<BR>反面教師としたり、部分的に抜き取るなり、ご自由に料理してください<BR>※リンクはフリーです、連絡も不要です。TOPでも途中でもお好きなところに・・(リンクしていただけたらありがたいです)</P>"
2	HTMLBRElement	BR	<BR>
3	HTMLBRElement	BR	<BR>
4	HTMLParaElement	P	"
<P>今は、一人でできる小さなシステムの受託開発作業 や 資金がきれたら派遣で食いつないでます。今年(2007年)に35歳になりました、、、プログラマー35歳定年説?もあるし、うまく転機をみつけないとなぁ・・・</P>"
5	HTMLBRElement	BR	<BR>
6	HTMLTable	TABLE
    ・
    ・
出力結果の続きは→[http://ken3-info.blog.ocn.ne.jp/test/2007/09/for_n_0_to_obji_44ca.html]を見てください。

指定したタグのデータを抜き出す .Tags("タグの文字")

例えば、文章の段落、<P>のタグを取り出す時は、
If objIE.Document.Body.All(n).TagName = "P" Then
'処理
End If
と、頭から1つ1つオブジェクトの.TagName タグの名前を見て判断して処理を行う、なんかヒマだねぇ、いい書き方無いの?
実は、指定したタグだけ取り出す そんな都合のよい書き方があるんですよ。

読者の声:だったら、ハヤク教えろよ、て言うか初めに書けよ

書き方は、簡単で、
For Each objA In objIE.Document.Body.All.Tags("P")
と、
objIE.Document.Body.Allに.Tags("タグの文字")を追加するだけです。
かなり簡単でしょ?
Sub ie_test_Ken3org_BODY_ALL_P()
    'ken3.org IE ドキュメント BODY ALL から <P>〜を取り出す

    Dim objIE As Object  'IEオブジェクト参照用
    Dim objA  As Object  'リンクのAタグ
    Dim yLINE As Integer '行カウンタ、Y行目
    
    '15行から9999行を削除する 前回の結果データを消す
    Rows("15:9999").Delete

    'IEを起動する 初期処理
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く
    objIE.Navigate "http://www.ken3.org/" '文字列で指定されたURLへ
    
    '表示終了まで待つ
    Do While objIE.Busy = True
        DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
        DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'html ドキュメント BODY オブジェクトからデータをセルへ転記(代入)する。
    'Document.Body.All.Tags("P") で Pタグのデータのみ処理する
    yLINE = 15  'セット開始の行を代入する
    For Each objA In objIE.Document.Body.All.Tags("P")
        'データをセルへセットする
        Cells(yLINE, "A") = yLINE - 15 'n番目を計算でセットする
        Cells(yLINE, "B") = "'" & TypeName(objA) 'TypeNameでオブジェクトのタイプを表示
        
        Cells(yLINE, "C") = "'" & objA.TagName   'タグの名前
        Cells(yLINE, "D") = "'" & Left(objA.OuterHTML, 256) '頭から256文字だけセット
        Cells(yLINE, "E") = "'" & Left(objA.InnerText, 256)
        Cells(yLINE, "F") = "'" & Left(objA.InnerHTML, 256)

        yLINE = yLINE + 1 'セット位置(行)を+1する
    Next
    
    objIE.Quit  'IEを閉じる
    
End Sub

Document.Body.Allのサンプル IETEST005.XLS→[http://ken3-info.blog.ocn.ne.jp/zip/IETEST005.zip]をzipを保存後、解凍して、テストしてみてください。

三流作者の補足:※ここまで、いろいろとIE Document.Bodyの解説書きましたが、下記のMSDN Front Pageの記事がかなりいい感じです。せっかく書いたので我流の解説を長々載せましたが、下記の記事がお奨めです。
Officeに入っていて、なかなか、使っていない?Front Page ですが、ホームページ作成のソフトなので、IEドキュメント オブジェクトをラップ(包み込んでいるのか?)、それともそのまんまアクセスしているのか?そこまでは探っていませんが、↓
Front Page 2002 Internet Explorer オブジェクト モデルへのアクセス
http://msdn.microsoft.com/library/ja/jpdnfp2k2/htm/odc_accessingie.asp

↑の アクティブ Web ページの HTML の操作 です。ここのサンプル(操作のVBA?)や説明を見るとイメージがつかみ易いと思います。※数少ない?日本語だし(オイオイ)、私の冗長解説よりも短くて、的確です。Front Pageのオブジェクトなので、そのままは使えませんが、Document操作の感覚はかなりつかめると思います


※まだまだ、書きかけ、内容をまとめていく予定・・・下のほうにあるメルマガの関連記事のリンクも合わせてみて下さい。


ドキュメントの探りやプロパティ、メソッド、イベント・・・とまだまだ、先は長い?全体の地図が見たいところだけど、未開拓の場所(未発掘のオブジェクト)が私も多くて、全体を示せずに今どこに居るのか?道に迷う感じですみません

読者の声:しっかりしろ、三流ガイド。IEオブジェクトの山で遭難しそうだよ。


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


WebBrowser Control や DHTML など オブジェクトやプロパティの探り方?

ヘルプはどこにあるの?三流なのにどうやって資料を探しどこで勉強したの?
と、質問をいただきます。(自分で調べていきたい読者様の前向きな問い合わせです)
やはり本家Microsoft.comのよく聞く?MSDNを探ってみるのも・・・(あまり深く見ると楽しむ前に挫折しかかるので、下記はほどほどに・・・)

読者の声:テメエの(三流プログラマーの) くどい説明 や 声がうわずってる 恥ずかしい動画を見るよりも、正式な資料やヘルプのURLを書いてくれれば自分で見て調べるからさ、さっさと教えな。

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] をクリック
などして、さまよいながら・・・探したりしてます。(三流ガイドの私も迷ってます)
MSDNの英語ってツライですよね。
読者の心の声:だったらテメエがわかりやすく翻訳したり説明しろよボケ
[後輩に追い越される三流な先輩]←こんな感じで後から来た皆さんに追い越されれると思いつつ(笑)三流的な調査方法を載せました。
※ここ見ろ と 三流君被害者の会 会員さんから教えてもらいました(2008/05/16)
[NET Framework クラス ライブラリ WebBrowser メソッド]
↑あれれ、よく見る日本語だぁ(笑)VBAでも応用して使える部分があると思います。※いままでの苦労は、、なんだったんだ(オイオイ)※※また三流情報で被害者を増やしちゃったよ(かなり反省)三流君被害者の会 会員がこれ以上増えないことを願いつつ、、

下記 MSDNでdocument Objectを探った動画、↓下見して作ったつもりが迷いまくってグダグダ(笑)な動画です。

↑MSDNを探るヒントになればいいのですが・・・

MSDN の Dynamic HTML 資料から プロパティやメソッドを探るのもアリ?

英語のページはニガテ、できたら日本語のページ無いの?三流君は回答が遅いので自分で調べたい・・・と、よくメールや電話で質問されます。
やはり日本語の資料が見たいよなぁ・・・いつもの適当な案ですが、
IEの操作と言ってますが、実際は目的のサイト運営者様がHTMLなどで表現した文章(オブジェクト)なので、その作成元となるHTMLやDynamic HTML の 資料から プロパティやメソッドを探り、そこからIEのプロパティやメソッドを検索する、そんな方法もアリかなぁと思います

で、実際の検索場所は、※ここも深いけど日本語なので やる気が出てくると思います
Internet SDK: プラットフォーム SDK
http://msdn.microsoft.com/ja-jp/library/cc364514.aspx
から
Dynamic HTML : http://msdn.microsoft.com/ja-jp/library/cc409712.aspx
の先の(オイオイ、まだ深いの?)

ドキュメントオブジェクトモデル : http://msdn.microsoft.com/ja-jp/library/cc392328.aspx
とか、同じ階層の(左側のメニュー)より
DHTMLリファレンス : http://msdn.microsoft.com/ja-jp/library/cc409720.aspx
が、日本語でHTMLの感じをつかむにはいいのかなぁ。

↓こんな感じでイロイロとDHTMLの表現方法が載ってます
オブジェクト http://msdn.microsoft.com/ja-jp/library/cc427917.aspx
プロパティ   http://msdn.microsoft.com/ja-jp/library/cc409928.aspx
メソッド     http://msdn.microsoft.com/ja-jp/library/cc428092.aspx
イベント     http://msdn.microsoft.com/ja-jp/library/cc392219.aspx
コレクション http://msdn.microsoft.com/ja-jp/library/cc410331.aspx
↑上記の日本語DHTMLリファレンスページでFormやLink , Documentの.allなど
HTMLのドキュメントオブジェクトの感じをつかんでから、
再度MSDNのIE英語ページへアタックしてみるのも1つの手かも。
※DHTMLに対応した操作がIEでも可能と仮定して、DHTMLから探り、同じプロパティ・メソッドを探す、そんな狙いです。

デバッグで止めて、現物の変数objIEを見る

資料探しに飽きたら現物を動かしながら見る、そんな方法もあります。デバックで止める、ウォッチで中身を見るがポイントです。※一度くらいは資料だけじゃなくて現物をさわってみては?

あんまり好きじゃないけど、
ブレークポイントを設定し、デバックで止めて、変数の中身・オブジェクトを見てみます。
~~~~~~~~~~~~~~~~

Sub xxxxx()
    Dim objIE    As Object  'IEオブジェクト参照用
    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True '見えるようにする(お約束)
    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://xxxx.xxxx.xxx/yyy.html"
    'デバックで止める
    MsgBox "OK?"
End Sub
右クリック、設定・解除 -- ブレークポイントを選択し、設定します。
←参考画面
※左側の余白を押してONとOFFを切り替えてもOKです。

次にobjIE変数のオブジェクトの中身を見たいのでウォッチ式を追加します。
追加方法は、どこでもいいので、ソースの画面で
objIEをドラックして反転表示の選択後、右クリックしてウォッチ式の追加を選択します。
←参考画面

実行して、オブジェクトの中身を探る
ブレークポイントの設定
変数objIEをウォッチする準備が整ったので、
実行して、変数の中身を探ってみます。

実行すると、ブレークポイントの場所で止まります。
当たり前だろ、そのために設定したんでしょアナタが。
そうでしたね。

ブレークポイントで止まってからは、
飲み会に誘った女の子みたいに逃げないので
落ち着いて中身をチェックしましょう。
(飲み会で女性陣に逃げられてるみたいだなぁ、この書き方だと(笑))

ウォッチウインドウの変数名の横+をクリックして中身を探って行きます。
←参考画面
それにしても、階層が深いです。
テーブル系のオブジェクトを探すが、なかなか見つからない(笑)
(女の子じゃなくって、IEの心の中は複雑なのね、、、)

中身を確認するために、となりのイミディエイトウインドウで、
←参考画面
? objIE.document.body.innerText
とか、中身を聞いてみた(アクセスすることもできます)

ここだけは静止画よりも動画操作イメージの方がいいのかなぁ?

と思ったが、↑動画解説もダラダラ長い・・・静止画を大量に貼る方が見やすいのかも(静止画だと上に戻るのも簡単だしね、動画は説明の少し前に戻るのが不器用だと大変)
※説明で、左側を右側とか言ってるし、イミディエイトウインドウで変数の中身を見る時 空白連発でいつものグダグダ(笑)
※10番目とか本人言ってたけど、Item10番目なら 10-1でDocument.All(9)と9を指定しないとね(意外と読者様も間違えるかも?)。ツリーで見ていたデータが9と気がつかないで11・12と実行して気まずくなったからOuterHTMLに変えようとするがスペルを間違える最悪ですね。女性とデートなら中ならたぶん逃げられてるなキット

番外編

検索エンジンやリンクから、せっかく私のサイトに来ていただいたのですが、下記2つの検索結果がかなり参考になったり・・・するのでは???
[IE 魔界の]2つをキーワードにしてGoogleで検索する
(↑かなりの確立で有効な回答が得られると思います、先輩方の回答を見ると謎が解けると思います。私もすらっと回答できる、そんな人になりたいですね。。。)
↓あとは、パターン的にobjIEと変数名を定義している人が多いので、
[objIE]をキーワードにしてGoogleで検索する
も有効かなぁ。※短いサンプルなどが見つかり、参考となるのでは?

さらに検索を紹介すると、[InternetExplorer.application]をキーワードにしてマイクロソフト内を検索する
などなど・・・

↑1歩1歩独自で進めたい人はこんな感じで、実際のコード や 掲示板・ML上の自分と似た質問のやりとりを見ながら進めるのがいいと思います。
※また、BBSやMLの空気を読んで(過去ログも読んで)、上級者がいらっしゃる掲示板に質問を投げてみるのもひとつの手です。
検索に迷ったら(IE操作の道に迷ったら)、objIEoIE さらに InternetExplorer.applicationDocument.All などをキーワードにGoogleやYahooで探ってみてください。

Web全体から Google を利用して、
www.ken3.org(サイト内)から Google を利用して、

不思議なIEお嬢様、まだまだ攻略できそうにないよね。
えっ、Excel姫やAccessお姉さまも攻略して無いダロって?
※う〜ん、実力無くて、なかなか、攻略できなくて。。。。
何かの参考となれば幸いです。


メルマガ関連項目のリンクと概要

概要を見て、これは?と思ったら、タイトルをクリックして本文を読んでください

※ココから下のサンプル、XP+IE6の1つ前の古い環境で作成したメルマガです。そのまま動かない場合もありますが、何かの参考となれば幸いです。
読者様より、IE7対応で↓下記のサイトを勧めていただきました
7.1 IEオブジェクトを作る(IE7編)
↑IE7のオブジェクトの対応が丁寧に書いてありました。
※私もザボってないで、がんばらねば・・・
※※あと、毎日のようにIE操作はUWSCを使え とメッセージをいただくので、IE操作の人はUWSCもググってみては??
[No.71 IE操作 リンク先を取出す .Document.links(i).href]
.Documentオブジェクトのリンクを探り、
.href .outertext .outerHTML を使ってみました。

関連リンク 2008/02/04: [三流君CODEのゴミ箱: VBA IE操作 リンクの取り出し と ダウンロード IE6+Excel2003] ←ダウンロードとの組み合わせとサンプルファイルです。サンプルにキレがないけど こちらも合わせてみてください

[No.97 InternetExplorer.application操作 .Clickでクリック] データをフォームに objIE.document.all.userid.Value = "Ken3" 'ユーザー名 objIE.document.all.pass.Value = "aaa" 'パスワード でセットして、その後、 objIE.document.all.btn01.Click 'クリックメソッドを実行 単純にクリックメソッドを実行して、自動ログイン処理を作成しました。 [No.105 VBAからIE操作 .document.forms(0).Submit でフォーム送信処理] ボタンに名前が付けられていないと、.Clickが使いにくかったので、 .document.forms(0).Submit を使用して、ファームの送信ボタンを押しました。 [No.108 IE アプリケーションのイベントを横取りする] Dim WithEvents IE As InternetExplorer と WithEventsキーワードを使って、 IE_NewWindow2(ppDisp As Object, Cancel As Boolean) と書き、IEのイベントに対して、処理を書いてみました。 テストで下記のようなダウンロード終了時に発生するイベントを書いてみました。 Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant) 'タイトルの代入 Me![txtTITLE] = Me.WebBrowser0.Document.Title 'HTMLの代入 Me![txtHTML] = Me.WebBrowser0.Document.body.innerhtml End Sub [No.110 IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True] .Document.all(n).Selected=Trueを使用して、 フォーム内のSELECT タグのOPTIONを選択してみました。 [No.112 IE 操作 .ExecWB でコマンド実行(検索したかったけど)] IEの機能(ボタン)を使いたかったので、.ExecWBを探りました。 検索コマンドがうまく行かなかったので、SendKeysで逃げました・・・・ [No.116 InternetExplorer操作 Frameと遊ぶ Objectを探る方法] F2のオブジェクトブラウザを使って、Frameを探り、 フレーム分割された画面に対して、データをセットしてみました。 objIE.Document.frames("F_RIGHT").Document.all("userid").Value = "Ken3" とフレーム関係を探ってみました。 [No.117 InternetExplorer操作 .Silentを使用したけど....] JavaScriptのalert警告メッセージを表示したくなかったので、 .Silent=Trueを使用したが、うまく行かなかった話です。 ※逃げ手(代替案)も成果も無いメルマガでした。(笑) [No.118 Microsoft Web Browser コントロールをフォームに貼る] Microsoft Web Browser コントロールをフォームに貼る手順の解説です。 たんに挿入、ActiveXコントロール、と順に選ぶだけです(簡単です) [No.119 IEを使用して、Web上の表をExcelへ] TABLEのタグから階層的にTR,TDのタグを取り出し、 Web上の表データをExcelに転記しました。 タグはタグの集合体、そんな階層イメージがわかればOKです。 [No.120 URLDownloadToFile APIを使用してダウンロードしてみた] URLDownloadToFile APIを使用して、 Web上のリンク先のデータをダウンロードしてみました。 (右クリック、保存の自動化にチャレンジしてみました) [No.124 IE _BeforeNavigate2イベントでPostデータを覗き見する] _BeforeNavigate2、次のURLへ移る前のイベントで、 PostDataをチェックしてみました。 [No.148 IE ラジオボタン(RADIO)の.Checkedと.Clickの違い] INPUT Type=RADIO(ラジオボタン)のオブジェクトに対して、 .Checkedだとイベントが起動しないが、 .ClickだとonClickのイベントが起動する、 そんな違いの話を少し書いてます。 [No.154 IE SELECTタグの選択 .SelectedIndex=nで選択] objIE.Document.all.Ken.SelectedIndex = 5 objIE.Document.all.kansou.SelectedIndex = 2 など、.SelectedIndexでSELECTタグの項目を選択してみた。 [No.155 IE SELECT後 .fireEventでJavaScriptのイベントを起動] fireEvent --- Fires a specified event on the object. (オブジェクトに指定された出来事を発砲します。) なんてのがあって、 '選択後にonchangeのイベントを発生させる objIE.Document.all.JYO.fireEvent ("onchange") として、JavaScriptのonchangeイベントを発生させました。 [No.156 TypeNameとShell.Applicationを使い起動済みのIEを探す] 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") ここから、ウインドウの数だけまわし、起動中のIEを探してみました。 For Each objWindow In objShell.Windows Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'オブジェクトを代入する Set objIE = objWindow nFLG = True '見つけたよ Exit For '初めに見つけたオブジェクトを代入 End If Next [No.157 IE Element の 我流な探し方(AS Objectはキライ)] TypeNameを使い、 'データをループする For Each objTAG In objIE.document.all Debug.Print objTAG.tagName & ":" & TypeName(objTAG) Cells(yline, "A") = objTAG.tagName Cells(yline, "B") = TypeName(objTAG) Cells(yline, "C") = objTAG.innerHTML yline = yline + 1 Next ループさせて、オブジェクトのタイプを探ってみました。 B:HTMLPhraseElement BR:HTMLBRElement A:HTMLAnchorElement とかいろいろとあるみたいです。 [No.159 IE 認証ページへのアクセス、basci認証ページって?] ヘッダーに "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q=" と基本認証のコードを埋め込み、Basic認証のページをIEで開いてみました。 'テスト用の認証ページに飛ぶ Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objIE.navigate2 strURL, , , , strHEAD たんにヘッダーで送っているだけです。 [No.162 IE データセット後、JavaScriptを起動する] IEのJavaScriptの起動方法ですが、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Me.WebBrowser1.Document.scripts(n) とか、scriptsがスクリプトオブジェクトだから、 これを.RUNとかないかなぁと探ってみましたが、 目的の処理が見つかりませんでした。 <a href = "JavaScript:parts('B')">〜 とリンクになっているから、それだったら、 .Navigate2 "JavaScript:parts('B')" でOKなのか?って発想でテスト実行してみました。 [No.163 IE _NewWindow2 別窓で開いたオブジェクトの管理] Dim WithEvents objNEW_IE As InternetExplorer でオブジェクト変数を定義して_NewWindow2で新規IEを作成、 Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean) Set objNEW_IE = CreateObject("InternetExplorer.Application") Set ppDisp = objNEW_IE '作ったオブジェクトを代入 objNEW_IE.Visible = True End Sub 下記のように、作成したIEのイベント(ここでは読み込み完了)で処理したサンプルです Private Sub objNEW_IE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "あたらしく開かれたURLは" & URL End Sub [No.164 IE .getElementsByTagNameでタグ指定 .Quitで閉じる] .getElementsByTagName("タグの名前") で指定したオブジェクトを取得できます。 新規ウインドウに表示された広告コードなどTEXTAREAのタグを .getElementsByTagName("TEXTAREA") で取り出し処理を行い、その後、.Quitで新規に開いたIEを閉じました。 [No.167 amazonの広告コード UTF-8を探る(keywordを作る) ] IE操作にはあまり関係ないのですが、 amazonの広告コード UTF-8でkeywordを作ってみました。 ※SJISをUTF-8に変換してみました。 [No.170 IE Aタグのリンク先を.Click(クリック)してみた] フレームの先のJavaScriptの起動ができなくて、 苦肉の策で Dim objFDOC As Object 'フレームのドキュメントを保存する Set objFDOC = objIE.Document.frames("F_RIGHT").Document '代入 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objFDOC.links.Length - 1 'リンク数分まわす Debug.Print objFDOC.links(n).href 'デバックで表示する 'リンク先(.href)をチェックする(文字列比較する) If objFDOC.links(n).href = "javascript:gonumber();" Then objFDOC.links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける End If Next n と、フレームの先のリンク先オブジェクトを探して.Click(クリック)して逃げました。 [No.175 IE .Navigate about:blankで空白ページ表示 禁断の制御文GOTO文] objIE.Navigate "about:blank" で空白のページを表示してから、 正常に移動されなかったら、禁断の制御文?GoTo文を使って再度読み込みに行く、 そんなサンプルです。(あまりキレがないけど) [No.176 VBAからIE操作 NAMEが同じフォームの項目へデータをセットする] 同じ名前が存在する時、.allで探すとエラーになるので、 objIE.document.all.q(0).Value = "golf" 'document.all.q(0)をテスト や objIE.document.all("q")(1).Value = "auto" 'document.all("q")(1)をテスト でセットして遊んでみました。 ラジオボタンの操作の時、 '上から3番目のGUCHIをチェック(2)の.CheckedをTrueにする objIE.document.Forms(0).kubun(2).Checked = True 'セレクト状態をtrueにする や '下記でもOKです.all("kubun")(2)を操作する 'objIE.document.all("kubun")(2).Checked = True 'セレクト状態をtrueにする が使えたので、場面によっては楽かなぁ??? [No.177 VBAからIE操作 TABLEの中にTABLE .getElementsByTagNameほか] サンプルは株価の表で、TABLEが2重になってました。 そのテーブルを、 '.document から.getElementsByTagName("TABLE")でオブジェクトを取り出す For Each objTAG In objIE.document.getElementsByTagName("TABLE") 'TABLEの中、テキスト文字で[終値]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "終値") > 0 _ なんて感じで識別して、取り込んでみました。

最近発売の雑誌を紹介する

パソコン雑誌です。息抜きや空いた時間に読んで見ては?
  1. DTP WORLD (ディーティーピー ワールド) 2008年 06月号
  2. Windows 100% 2008年 06月号
  3. 日経 PC (ピーシー) ビギナーズ 2008年 06月号
  4. PC Japan (ジャパン) 2008年 06月号
  5. Software Design (ソフトウエア デザイン) 2008年 06月号
  6. Web Designing (ウェブデザイニング) 2008年 06月号
  7. I/O (アイオー) 2008年 06月号
  8. 月刊 COMPUTERWORLD (コンピュータワールド) 2008年 07月号

ページフッター(リンクなど)

[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・


2008/05/17 23:26:43