2011/06/26 記事を修正しました。
objIE.Document.Script.setTimeout "javascript:コード", 200
みたいな感じで、Document.Script.setTimeoutで実行可能でした。
記事は、そのままにしていますが、Document.Script.setTimeoutを一度試してみてください
よろしくお願いします。
下記、実際のテスト動画です。
ソースコードと簡単な解説は [蛇足 脱線 横道 VBScript IE操作 で javaScriptを実行 Document.Script.setTimeoutをテスト] をみてください。
VBA JavaScriptのキーワードで誤爆していらっしゃる来場者がかなり多いので、
本件とあまり関係ないVBAからJavaScriptを使う方法を載せます。
スクリプト コントロールの概要
https://www.microsoft.com/japan/msdn/scripting/scriptcontrol/scoverview.htm
↑MSのサイトだけど、httpとhttpsが混在してると警告が出るけどビックリしないでね。
頭の例は、MSが大好きなVBScriptだけど、.Language = "JScript" も可能と途中で書いてありました・・・。
なんて↑へんな日本語で書くよりコード↓を見た方が伝わりやすいですよね。
|
概要: IEのJavaScriptの起動方法ですが、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Me.WebBrowser1.Document.scripts(n) とか、scriptsがスクリプトオブジェクトだから、 これを.RUNとかないかなぁと探ってみましたが、 目的の処理が見つかりませんでした。 <a href = "JavaScript:parts('B')">〜 とリンクになっているから、それだったら、 .Navigate2 "JavaScript:parts('B')" でOKなのか?って発想でテスト実行してみました。 ※メルマガ記事ではオブジェクトの参照設定をしていませんができれば、下記を参考に参照設定してください。 [Microsoft Internet Controls,Microsoft HTML Object Library を参照設定する](このほうが開発時、操作時に楽) また、VistaとIE7の場合は、 [IE7 操作 Vistaで失敗]も参考にしてください。 |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード] |
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
どうも、三流プログラマーのKen3です。 今回は、 IE操作で、フォームにデータセット後、 JavaScriptを起動する、そんな処理を行ってみたいと思います。/* * 1.今回のキッカケ */
本を売って、小金を儲けよう、、、そんな不純な心の動きで、 amazon.com と 楽天ブック に 申し込みました。 商品個別リンクがあって、個別の商品リンクを作成できるみたいです。 この、個別リンクの作成にチャレンジしてみたいと思います。 楽天ブックで個別リンクを作るには、 http://books.rakuten.co.jp/afvc/afinfo/page03.html のページに、 紹介したい本のISBN番号 と 自分の広告コード SIDとPIDを入力して 作成ボタンを押すと、作成されます。 ExcelのVBAから、Webブラウザコントロールを使って、データをセットしてみます。/* * 2.動作の仕組みを探る */
http://books.rakuten.co.jp/afvc/afinfo/page03.html のhtmlを探ると、 form name=parts input type="text" name="isbn" input type="text" name="sid" input type="text" name="pid" となっていて、 ソースの表示ボタンは、 <a href = "JavaScript:parts('A')"> や <a href = "JavaScript:parts('B')"> とjavascriptで処理となってます。 ボタンが押され、 JavaScript:parts('B')処理が走ると、 新規のウインドウに、広告用のソースコードが表示される、 そんな仕組みとなってます。/* * 3.仕様を簡単に書く */
フォームを作成して、ISBN番号、SID,PIDを入力させます。 SID [ ] ← 設定用のシートからデフォルトを表示する PID [ ] ← 設定用のシートからデフォルトを表示する ISBN [ ] ← 目的の番号を入力する 広告 [ ] ← 複数行のテキストボックスを作成して、 ・ 広告用のソースを表示させる ・ [ ] 作成ボタン ボタンが押されたら、 リンク作成ページへ飛び、データをセットして、 リンク作成ボタンを押す(javascriptをVBAから起動) 広告コード用の新規のウインドウが表示される。 そのウインドウから、広告コードを取り出し、 テキストボックスにセットする。 セット完了後、広告作成のweb表示・ブラウザを閉じる。 こんな感じの流れで、 フォームにパラメータセット、 データ送信 サーバー側でコード作成 結果のソースコードを取得 を行ってみたいと思います。/* * 4.問題点、技術確認 */
処理やデータの流れを整理したら、 次は、 予想される問題点を整理します。 技術的に可能か?それとも不可能か? 仕様を聞いて、不安になった部分は?ありますか? なんて感じで自分に自問自答しながら、項目をまとめていきます。 仕様書からプログラムを起こす前準備で、 ・イメージが湧き出してすぐにでも作れそうと感じるか、 ・それとも、不安になるか、、、 ここのファーストタッチが重要だと思います。 ※性格的にいつも不安な担当者 や 根拠の無い自信がある担当者も居るんだけど。 今回の処理を私なりにまとめたポイントは、 webのコントロールにデータをセット可能か? → 過去やったことがある(経験がある自信あるし、ここは大丈夫と答えられる) webのjavascriptをVBAから起動できるのか? → 過去、ボタンのコントロールに対して、 .Clickメソッドでやったことあるが 指定した関数をパラメータ付きで起動したことは無い ※技術的にできることを早急に確認する webのコントロールから作られたウインドウのデータを取得できるか? → javascriptでopenされた結果の表示(新規ウインドウ) からデータを取得可能か and 取得方法を調べる など、仕様書(やりたいこと) から 予想される問題点を洗い出します。 あとは、その問題点をまず、簡単なテストでつぶします。 つぶしきれなかったら、仕様を変えてもらうなどの処理が必要です。 よくある話ですが、 夢のような仕様なのか、現実的な仕様なのか作成に入る前に判断します。 不安を先送りにすると、ロクナコト無いですよ。 また、よく掲示板で目にする話なのですが、 XXXXはできるのでしょうか?事前調査で知りたい って書き込みかなぁ。これもアリでしょう。 ※実際の問題点やソースを開示しろと言われてる場面も見かけるが。 チョット内容が違うけど、愚痴系のメルマガで、 No.138 アイツが打てたから、オレも打てる。マシンガン打線 http://www.ken3.org/guchi/backno/guchi138.html なんて書いてます、 実現可能な仕様 や 過去に経験者が居ると安心だよね。/* * 5.IE データセット後、JavaScriptを起動する */
楽天ブックのリンク作成ページ http://books.rakuten.co.jp/afvc/afinfo/page03.html ここで、 ISBN番号 と 自分の広告コードのSIDとPIDを入力してボタンを押すと ソースが表示される。 ソースを探ると、 form name=parts フォームの名前はpartsかぁ、 input type="text" name="isbn" input type="text" name="sid" input type="text" name="pid" と入力フォームがなっていて、 a href = "JavaScript:parts('A') a href = "JavaScript:parts('B') ・ ・ a href = "JavaScript:parts('F') a href = "JavaScript:parts('L') a href = "JavaScript:parts('M') a href = "JavaScript:parts('S') とサイズ別にJavaScriptを起動しているみたいです。 そこで、プログラム作成の手順としては、 ExcelUserフォームにISBN,SID,PIDの入力を作成する。 実行ボタンが押されたら、 http://books.rakuten.co.jp/afvc/afinfo/page03.html へ飛び、表示の終了を待ってから、 Webコントロール上のform name=partsのテキストボックスにデータをセットする。 JavaScript:parts('B')を起動させ広告を表示させる。 ※サイズBの広告データを作成します。 テストデータは、 ISBN:4797321296 基礎からのデータベース設計 SID=777777 PID=99999999 をセットして、実行してみます。 サイズBのボタンを探して、.Clickといつもの方法でも良かったのですが、 今回は、JavaScriptの起動方法を探してみました。 IEのJavaScriptの起動方法ですが、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ? Me.WebBrowser1.Document.scripts(1).scopeName とか、scriptsがスクリプトオブジェクトだから、 これを.RUNとかないかなぁと探ってみましたが、 目的の処理が見つかりませんでした。 チョット違うかもしれないけど、今回は、 画像がクリックされたらのAタグだったので、 'JavaScriptを起動する(リンクで飛ぶように見せかけるの?) Me.WebBrowser1.Navigate2 "JavaScript:parts('B')" とすることで、JavaScriptを起動できたことでした。 なんか意外でした・・・ <a href = "JavaScript:parts('B')">〜 となっているから、それだったら、 .Navigate2 "JavaScript:parts('B')" でOKなのか?って発想でテストしてみました。 現在、下記↓のサンプルは動作しません・・・情報が古くてスミマセン
Private Sub btnRUN_Click() Dim time10 As Date '広告作成ページに飛ぶ Me.WebBrowser1.Navigate2 "http://books.rakuten.co.jp/afvc/afinfo/page03.html" '2秒表示を強制的に待つ time10 = DateAdd("s", 2, Now()) Do While True DoEvents If time10 < Now() Then Exit Do Loop '表示完了を待つ While Me.WebBrowser1.Busy = True _ Or Me.WebBrowser1.ReadyState <> READYSTATE_COMPLETE DoEvents Wend 'データをセットする Me.WebBrowser1.Document.parts.isbn.Value = Me.txtISBN.Text Me.WebBrowser1.Document.parts.sid.Value = Me.txtSID Me.WebBrowser1.Document.parts.pid.Value = Me.txtPID 'JavaScriptを起動する(リンクで飛ぶように見せかけるの?) Me.WebBrowser1.Navigate2 "JavaScript:parts('B')" End Sub |
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。