VBAで(ExcelやAccessなどから)IEを操作してみたいと思います。
操作方法の入り口として何かの参考・お役に立てれば幸いです。
手前味噌の対策、とてもお勧めできないけど一番手軽なのが↓
[Vista IE7 信頼済みのサイトにしてVBAからコントロールしてみた]
↑いくら目的のサイトだからって、セキュリティを変更するとマズイし気分が悪いよね
で、2つ目の案は、三流的ないつもの発想ですが、ExcelのUserFormにIEを貼り操作する(代入する)そんな方法で、IE7 への 対応・逃げ手を考えてみました・・・
[ExcelのUserFormにIEを貼り操作]
ExcelのフォームにIEを閉じ込めてしまうとExcel2007+IE7でも動きます。なんか小細工だけど・・・
もっといい対策として、読者様より、↓下記のサイトを勧めていただきました
↑IE7のオブジェクトの作り方が丁寧に書いてありました。起動されているIEを探す方法です。識者に感謝ですね。
※私もザボってないで、がんばらねば・・・
※※あと、毎日のように(最近はもらいませんが)IE操作はUWSCを使え とメッセージをいただくので、IE自動操作の人はUWSCとIE操作のキーワードでググってみては??
Ken3の連絡先:[メールアドレス・ソフトバンク携帯番号]です。
<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>
初めは、サンプルを走らせながらが一番いいのかなぁ?
マニュアルや調査することも非常に大切なのですが、入り口で挫折しないためには、楽しくなくっちゃ???
サンプルを見ながら動かしていけば、なんとなく感覚がつかめてくるので、あとはエラー処理を含めた丁寧なプログラムを組んでいく、そんな感じがいいのでは???
|
CreateObjectは簡単で、
Sub ie_test()
Dim objIE As Object 'IEオブジェクト参照用
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
End Sub
↑とにかくコレを貼り付けて実行してみてください。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を開くことができたでしょ。
'表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
Do While objIE.Busy = True
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
Do While objIE.ReadyState <> 4
DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
Loop
なぜ、待つかと言うと、いきなり入れるとイタイでしょ?(オイオイ、何言ってんだおっさん)過去の解説はこちら→
[過去の解説 vba_ie_20070831.asp]
[過去の解説 vba_ie20070520.asp]
もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))
|
Sub TEST_SHEET_NAME()
'シートの名前をテストで表示する
Dim i As Integer 'カウンター、添え字
For i = 1 To ActiveWorkbook.Sheets.Count
MsgBox i & " シートの名前 " & ActiveWorkbook.Sheets(i).Name
Next i
End SubSub TEST_SHEET_NAME_FOR_EACH()
Dim objSHEET As Worksheet 'シートのオブジェクト受け取り用
For Each objSHEET In ActiveWorkbook.Sheets
MsgBox " シートの名前 " & objSHEET.Name
Next
End SubSub 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 |
|
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]を見てください。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 |
※まだまだ、書きかけ、内容をまとめていく予定・・・下のほうにあるメルマガの関連記事のリンクも合わせてみて下さい。
ドキュメントの探りやプロパティ、メソッド、イベント・・・とまだまだ、先は長い?全体の地図が見たいところだけど、未開拓の場所(未発掘のオブジェクト)が私も多くて、全体を示せずに今どこに居るのか?道に迷う感じですみません
読者の声:しっかりしろ、三流ガイド。IEオブジェクトの山で遭難しそうだよ。ヘルプはどこにあるの?三流なのにどうやって資料を探しどこで勉強したの?
と、質問をいただきます。(自分で調べていきたい読者様の前向きな問い合わせです)
やはり本家Microsoft.comのよく聞く?MSDNを探ってみるのも・・・(あまり深く見ると楽しむ前に挫折しかかるので、下記はほどほどに・・・)
読者の声:テメエの(三流プログラマーの) くどい説明 や 声がうわずってる 恥ずかしい動画を見るよりも、正式な資料やヘルプのURLを書いてくれれば自分で見て調べるからさ、さっさと教えな。
あっ、これですか・・
英語だけど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を探るヒントになればいいのですが・・・
英語のページはニガテ、できたら日本語のページ無いの?三流君は回答が遅いので自分で調べたい・・・と、よくメールや電話で質問されます。
やはり日本語の資料が見たいよなぁ・・・いつもの適当な案ですが、
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から探り、同じプロパティ・メソッドを探す、そんな狙いです。
資料探しに飽きたら現物を動かしながら見る、そんな方法もあります。デバックで止める、ウォッチで中身を見るがポイントです。※一度くらいは資料だけじゃなくて現物をさわってみては?
あんまり好きじゃないけど、
ブレークポイントを設定し、デバックで止めて、変数の中身・オブジェクトを見てみます。
~~~~~~~~~~~~~~~~
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
右クリック、設定・解除 -- ブレークポイントを選択し、設定します。
←参考画面次に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操作の道に迷ったら)、objIEやoIE さらに InternetExplorer.application や Document.All などをキーワードにGoogleやYahooで探ってみてください。
[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 _ なんて感じで識別して、取り込んでみました。
| ※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。 お奨め本の目次を見るだけでも勉強になったり |