概要: |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
どうも、三流プログラマーのKen3です。 今回は、 IE で フレームの先のJavaScriptの起動にチャレンジしてみます。 といっても、.Runや.Scriptは攻略できなくて、逃げたんだけどね。/* * 1. 今回のキッカケ */
掲示板にいただいた質問 --- >Ken3さんの「InternetExplorer操作 Frameと遊ぶ Objectを探る方法」 >にて以下のようなコードがありますよね。 >----------------------------------------------------------- >Sub ie_test_2() > > Dim objIE As Object '型は何でも来い、得意のObject型 > > 'インターネットエクスプローラーのオブジェクトを作る > Set objIE = CreateObject("InternetExplorer.application") > objIE.Visible = True '見えるようにする(お約束) > > 'フレームページを表示する > objIE.Navigate "http://www.ken3.org/vba/test116.html" > > '表示終了まで待つ > Do While objIE.Busy = True > '何もしないループ(笑) > DoEvents > Loop > > 'TOPのオブジェクトから項目まで.で行く(笑) > objIE.Document.frames("F_RIGHT").Document.all("userid").Value = "Ken3" > objIE.Document.frames("F_RIGHT").Document.all("pass").Value = "aaa" > >End Sub >--------------------------------------------------- > >これを参考にして自動ログインからフレームのテキストボックスに >文字を代入する所までは出来たのですが、最後にJavaScriptを動かす >所がうまくいきません。 > >objIE.navigate "javascript:******()" →ダメ >objIE.Document.frames("F_RIGHT").***** →ダメ --- と質問をもらった。 javascriptかぁ・・・ 前に、 No.162 IE データセット後、JavaScriptを起動する http://www.ken3.org/vba/backno/vba162.html で Me.WebBrowser1.Document.scripts(n) とか、scriptsがスクリプトオブジェクトだから、 これを.RUNとかないかなぁと探ってみましたが、 目的の処理が見つかりませんでした。 そこで、 <a href = "JavaScript:parts('B')">〜 とリンクになっているから、それだったら、 .Navigate2 "JavaScript:parts('B')" でOKなのか?って発想でテスト実行して逃げてたっけ・・・/* * 2.あれでできるんじゃない?と無責任な腰高の先輩達 */
上司や先輩は経験豊富なので聞いてみると、無責任な回答をもらったりする。 下記、私の無責任な回答 ---- >タイトル:.fireEventでイベントを発砲できたらいいな > >> objIE.navigate "javascript:******()" →ダメ >> objIE.Document.frames("F_RIGHT").***** →ダメ > >もし、JavaScriptが ><DIV align=right><SELECT onchange=Rdp(); name=JYO> > <OPTION value=0 selected>選択項目 </OPTION></SELECT></DIV></TD></TR> ><TR> ><TD><B>レース</B><BR> ><DIV align=right><SELECT onchange=Hdp(); name=Race> > <OPTION value=0 selected>選択項目 </OPTION></SELECT></DIV></TD></TR> > >みたいに、 >onchange >とかイベントに割り当たっていたら、 >.fireEventなんてメソッドがあったり。 > >No.155 IE SELECT後 .fireEventでJavaScriptのイベントを起動 >http://www.ken3.org/vba/backno/vba155.html > >↑を参照してください。 > >そのまま起動だったら・・う〜ん。。。 > >htmlを見てないのでなんともいえませんが、 --- なんて回答してました。 まるで腰高の内野手みたいな一歩も動く気ない回答だ。 ※サッカーの腰高ディフェンダー、バスケの棒立ち選手って感じかな。 いつから自分が嫌いな歳だけ高い(プライドも高い)プログラマーになっちまったんだ、 動けよコラ、ボール(質問)に真剣に飛びつけよと思いつつ・・・ (※自分から動けなくなった先輩プログラマーって...イヤだけど自分がなるとは・・) >htmlを見てないのでなんともいえませんが、 けっ、プログラムや解説は三流でも、 できない時の予防線のハリカタは超一流ですね。 ~~~~~~~~~~~~~~~~~~ (※できないのを認めたくない、プライドだけが高いプログラマーって嫌だよね。 見習いたくないけど私みたいな先輩達が一部に居るのも(多い?)のも事実だったり)/* * 3.重い腰を上げ、テスト環境を作る */
いつもの自己嫌悪に落ちつつ、もっと親切な回答しなきゃと思っていたら、 質問者よりソースの一部をもらう(ボールが飛んできた) ----- >フレームを指す "objIE.Document.frames("F_RIGHT")."に >"FireEvent"、"navigate"を組み合わせて何回も試してみたのですが。 >とにかくInternetExplorerの操作は初めてなので、すべて試行錯誤の >状態です。 > >ちなみにソースはこんな感じです。 >-------------------------------------------------------- ><b>顧客番号</b></font> <input TYPE="TextBox" size="6" Name="number" Id="Job" maxlength="8"> > </font><font FACE="Verdana, arial, geneva" COLOR="#000000" SIZE="2"> ><b><a HRef="JavaScript:gonumber();">検索</a></b></font></td> >--------------------------------------------------------- > >"number"に数字を代入する所までは出来ています。 >あとはJavaScript:gonumber()動かせれば・・という所です。 ----- a タグで JavaScript:gonumber() へ飛んでるのね。 こいつを攻略するかぁ。 環境を相手から教わったので、まずテスト環境を作ります。 ※いい先輩・上司のテクニックって、 質問して来た後輩から、状況をうまく聞きだすんだけど、 私はなんとなくうまく聞き出せなかったり。 ※※使えないプライド高い先輩予備軍でプライド高い新人プログラマー、 なかなか状況を聞き出しにくい、そんな後輩も居るのでいい先輩も難しいんだけど 今日は余談が長い、もっと短く要点をまとめてください。。。 左右のフレームを呼び出すメインのHtmlを作成します。 test170main.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/vba/test170f.html" NAME="F_RIGHT"> </frameset> </html> 次にテストで使う(問題のフレーム)htmlを作成します。 test170f.html <HTML> <head> <title>A タグでJavaScriptを起動するHTML</title> </head> <BODY BGCOLOR="#ffffff"> <h1>A タグでJavaScriptを起動するHTML</h1> リンク先を押すとJavaScriptが起動します <br> <FORM name=test> <TABLE BORDER="1"> <tr> <td><b>顧客番号</b></td> <td><input TYPE="TextBox" size="6" Name="number" Id="Job" maxlength="8"></td> <td><a HRef="JavaScript:gonumber();">検索</a></td> </tr> <tr> <td><b>担当者番号</b></td> <td><input TYPE="TextBox" size="6" Name="tanto" Id="Tan" maxlength="8"></td> <td><a HRef="JavaScript:tanto();">検索</a></td> </tr> </TABLE> </FORM> <script type="text/javascript"> <!-- //ここからJavaの関数を書いてみる function gonumber(){ // gonumber 検索が押された時に alert("gonumberが呼ばれたよ、何か処理するよ"); } function tanto(){ // tanto 検索が押された時に alert("tantoが呼ばれたよ、何か処理するよ"); } // --> </script> <hr> </BODY> </HTML> と、簡単なテストプログラムを書いてみました。 http://www.ken3.org/vba/test170main.html ↑テストのHTMLを実行してみてください。/* * 4.一緒に失敗してみる(同じ目線で失敗してみる)・・・ */
上から(安全な場所から)、いいかげんなことを言うのではなく、 同じ目線で(同じ失敗で)はじめてみたいと思います。 ※居るんだよね口では偉そうなこと言ってて、現場に来ると(現状を把握すると) こりゃ大変だ、予算が、納期が・・と担当者以上にあわてるヤツが・・・ まずは、 http://www.ken3.org/vba/test170main.html を読み込んで、 JavaScript:gonumber()を試してみます。
Sub ie_test_001() Dim objIE As Object '型は何でも来い、得意のObject型 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'フレームページを表示する objIE.Navigate "http://www.ken3.org/vba/test170main.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '↑ステータスを見ないとフレームの場合は良くないよ、、、 'TOPのオブジェクトから項目まで.で行く(笑) objIE.Document.frames("F_RIGHT").Document.all("Job").Value = "4649" objIE.Document.frames("F_RIGHT").Document.all("Tan").Value = "114" 'JavaScriptを起動する objIE.Navigate "JavaScript:gonumber()" End Sub |
Sub ie_test_002() Dim objIE As Object '型は何でも来い、得意のObject型 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) 'フレームページを表示する objIE.Navigate "http://www.ken3.org/vba/test170main.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '↑ステータスを見ないとフレームの場合は良くないよ、、、 'TOPのオブジェクトから項目まで.で行く(笑) objIE.Document.frames("F_RIGHT").Document.all("Job").Value = "4649" objIE.Document.frames("F_RIGHT").Document.all("Tan").Value = "114" 'フレームのドキュメントを変数に保存して、 'リンクのアンカーオブジェクトをクリックする Dim n As Integer 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 End Sub |
いろいろと別な切り口の方法もあるみたいなので...
objIE.Document.Script.setTimeout "javascript:コード", 200
みたいな感じで、Document.Script.setTimeoutでコードが実行可能でした。
Document.Script.setTimeoutを一度試してみてください
下記、実際のテスト動画です。よろしくお願いします。
ソースコードと簡単な解説は [蛇足 脱線 横道 VBScript IE操作 で javaScriptを実行 Document.Script.setTimeoutをテスト] をみてください。
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。