[三流君] [VBAで楽しく] [VBA IE 操作]
−−> No.162 IE データセット後、JavaScriptを起動する

IE データセット後、JavaScriptを起動する

2011/06/26 記事を修正しました。 objIE.Document.Script.setTimeout "javascript:コード", 200
みたいな感じで、Document.Script.setTimeoutで実行可能でした。
記事は、そのままにしていますが、Document.Script.setTimeoutを一度試してみてください
よろしくお願いします。

Document.Script.setTimeoutで実行可能でした

下記、実際のテスト動画です。

ソースコードと簡単な解説は [蛇足 脱線 横道 VBScript IE操作 で javaScriptを実行 Document.Script.setTimeoutをテスト] をみてください。



VBA JavaScript の 誤爆?が多いので

VBA JavaScriptのキーワードで誤爆していらっしゃる来場者がかなり多いので、
本件とあまり関係ないVBAからJavaScriptを使う方法を載せます。

スクリプト コントロールの概要
https://www.microsoft.com/japan/msdn/scripting/scriptcontrol/scoverview.htm
↑MSのサイトだけど、httpとhttpsが混在してると警告が出るけどビックリしないでね。
頭の例は、MSが大好きなVBScriptだけど、.Language = "JScript" も可能と途中で書いてありました・・・。
なんて↑へんな日本語で書くよりコード↓を見た方が伝わりやすいですよね。
Sub JavaScript_Test() 'VBA から VavaScriptを使うテスト

    '検索文字を入力
    Dim strMOJI As String
    strMOJI = InputBox("キーワード=", "入力", "三流")

    '検索文字をJavaScriptのencodeURI関数で作る
    Dim strPARA As String  'パラメーター
    Dim sc As Object
    Set sc = CreateObject("ScriptControl")
    sc.Language = "Jscript"  'JavaScriptを指定(書き間違えないでね)
    strPARA = sc.CodeObject.encodeURI(strMOJI) 'encodeURI関数を呼ぶ
    Set sc = Nothing
    Debug.Print strPARA
    
    '手抜きで Shell でWebページを表示する
    Dim strURL As String
    strURL = "http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=" & strPARA
    Call Shell("explorer.exe """ & strURL & """", vbNormalFocus)

End Sub
↑こんな感じで、使えるので、活用してみてください。おっと、こんなの載せるから、検索エンジンが間違えたんじゃなくて普通に VBA JavaScriptで来場者が来るのか・・・
※※上記蛇足は忘れて、下記から本題に入ります


No.162 で 昔発行した内容、恥はそのまま(笑)

概要:

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操作系の記事一覧]もヨロシクです。


楽天のリンク取得方法が変わったので下記のソースだとテスト不可ですが。
参考程度に見てください

IE データセット後、JavaScriptを起動する

どうも、三流プログラマーの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
こんな感じで、データセット、JavaScriptの起動までいきました。 さてと、次は、開らかれた新規ウインドウから、広告ソースデータをGetしないと。

/* * 6.終わりの挨拶 */

http://www.ken3.org/p/o20040515.lzh に webdataset.xlsが圧縮されてます。 処理が中途半端ですが、テストしてみてください。 何か読者の心に残れば、うれしいです。 *私の独り言をうまく消化してくださいね。 三流プログラマー Ken3でした。

ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]

大分類:[Document.Forms(入力処理)] / [Document.Links(リンク情報)] / [Document.Images(画像情報)] / [Document.Frames(フレーム処理)]
サンプル・例題:[過去のメルマガ記事一覧] / [少し大きなIE操作サンプル] / [小さなコードでIE操作の動作確認]

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[F1ヘルプ マクロ記録ほか]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、デバッグモード]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[VBA ウォッチ式とSTOPを使ってみた]・・・STOPで止め、ウォッチ式でオブジェクトの中身を確認する方法など
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話

項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。
[プログラムは心? spirit]・・・プログラマー 心・気質・魂
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
[VBAでIE ウェブブラウザーを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[MSアクセス から エクセル を呼ぶ Excel.Application]・・・AccessからExcelを操作したりデータの書き出しなどです
[アウトルック メールの操作 Outlook.Application]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[エクセル ユーザーフォームを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[エクセルからアクセスを操作する]・・・ExcelからAccessのマクロを起動してみました、
[エクセル関係 関数、その他]・・・その他Excel関係です

Access関係:
[アクセス ユーザーフォーム/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[アクセス レポート操作]・・・レポートを操作してみました
[アクセス クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[テキストファイルの操作(Open,Close,Print,Input)]・・・普通のテキストファイルを使ったサンプルです

Blog:[三流君の作業日記]/ [objIEを使用したサンプルコードを見る]/ 広告-[通販人気商品の足跡]

質問や要望など メッセージを送る(三流君に連絡する)

三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。

感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。

あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)

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



[トップページへ 戻る] / [VBA TOP] / [WebBrowser IEの操作 TOPへ]