[三流君] [VBAで楽しく] [VBA IE 操作]
−−> No.105 VBAからIE操作 .document.forms(0).Submit でフォーム送信処理

VBAからIE操作 .document.forms(0).Submit でフォーム送信処理

メルマガ発行内容

<VBAからIE操作 .document.forms(0).Submit でフォーム送信処理>

どうも、三流プログラマーのKen3です。 今回は、 VBAからIE操作 で、 フォームの送信処理をやってみます。 たいした解説、回答内容じゃないのですが。

/* * 1.今回のキッカケ */

メールで下記の質問をもらいました。 ---- >それで、また質問なのですが、上記の環境と変わって、今はデータがPDF >ではなくHTMLからCSVで取得できます。そのさい、Accessから IE にHTML上の、 >INPUUT窓に入力コードとEnterをSendkeys で送りますが、{Enter}がダメで、結 >局マウスで実行ボタンをクリックしています。 > >これは、ActiveX上でのことで、通常のIE上では、入力、Enterが効きます。 >なにか、復壊コードとOSの関係かと思いますが、よろしくお願いします。 > >マシン環境は、WINME アクセス2000 IE6.0 です。 ---- う〜ん、Enterが送られないのかぁ。 で、 通常のIE上はOK、フォームに設置したActiveXコントロールは不可ってことか・・

/* * 2.調べごと、下準備 */

やりたいことは、HTMLフォームにデータセットと送信ボタンクリックなので、 手前味噌的な紹介だと、 No.97 InternetExplorer.application操作 .Clickでクリック http://www.ken3.org/backno/backno_vba20.html#97 で、 http://www.ken3.org/cgi-bin/test/test068.html の下記のHTMLに対して、 <center> <h2>けんぞうのへんてこな世界へようこそ</h2> <br> <table bolder=1> <FORM ACTION="test068-1.asp" METHOD="POST"> USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> </table><br> <a Href="test068-2.asp" TARGET="_top">新規ユーザー登録</a><br> </center> データをセットして、送信ボタンを押してみました。
Sub ie_test_click()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

     'データせっとできたので、
     'ボタンを押してみる
     objIE.document.all.btn01.Click  'クリックメソッドを実行

End Sub
こんな、短いプログラムで、自動ログイン処理が可能です。 ※なんとなく、オールスターの自動投票処理も簡単に出来るかもしれませんね。 なんて、ほざいてましたが、 ここで、1つ問題があります。 <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> SUMMITのボタンに、私は名前を付けましたが、 <INPUT TYPE="submit" VALUE="ログイン"> なんて感じで、名前は付けなくてもいいんですね。 なので、 'ボタンを押してみる objIE.document.all.btn01.Click 'クリックメソッドを実行 が、使えないフォームがあるんですよ。。。 ※名前が付いてないのでxxxx.Clickが出来ない。 そんなのHTML作っているヒトに、名前付けてもらえばいいじゃん? 名前付けるなんてスグでしょ? オイオイ、待ってよ・・・ 私、違法投票のプログラム作ってます、私が自動にクリックしたいので、 フォームのボタンに何か名前を付けてください よろしくお願いします・・なんて言えないでしょ。 自分でHTML側も作っていれば別だけど、 今ある物を、外部からIE通して操作するんだから、 自分の都合のよいように作ってくれないよ。 ※また、相手先の突然のレイアウト変更とかあったりして、  ハマるケースもありかなぁ。

/* * 3.IEオブジェクトを探り、Formsを発見 */

さてと、どうしましょうかねぇ。 問題は、Enterキーだけなので、フォームをクリックできればなぁ。 また、久々に得体の知れないIEお嬢様のオブジェクトを探るか、、、 ウオッチ式を入れてと、 おっ、Formsってそれらしいのがあるよね。 これ使えそうですね。 ↑オブジェクトの中から、Formsを発見。 探り方の詳細は、 [No.52 InternetExplorer.application .document.body.innerText] ( http://www.ken3.org/backno/backno_vba11.html#52 を参照) で、彼女(オブジェクト)の中身を探る方法を少し書いてます。 よし、さっそくテストしてみるか。 'フォームをクリックする? objIE.document.forms(0).Click と入れて実行。 オイオイ、何も起こんないよ、 ホントに動作してるのか? これって、フォームをクリックしてるんじゃない? ボタンならクリックでいいけど、 フォームは、submit でしょ? そっか、では、テストで、 'フォームをSubmitする? objIE.document.forms(0).Submit でどうだ・・・ おっ、ログインできた。 objIE.document.forms(0).Submit .forms(0)と、頭のフォームと番号で指定しているのが、 情けないけど、このフォームに対して、 .Submitでリターンキーを押した結果が得られます。 objIE.document.forms(0).Submit IEオブジェクトのドキュメントの0番目のフォームをSUBMITって感じかなぁ。 最後に1行書いただけですが、フォームのSUBMITテストです。 いろいろと自分の環境に合わせて、テストしてみてください。
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

     'フォームをSubmitする
     objIE.document.forms(0).Submit

End Sub
あっ、質問は、Accessのフォーム上に配置した ActiveXコントロールだった。 処理同じだけど WebBrowser0 って名前で、Web Browser コントロールを挿入。 コマンドボタンが押されたら、
Private Sub コマンド1_Click()

    Me!WebBrowser0.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    Me!WebBrowser0.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While Me!WebBrowser0.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     Me!WebBrowser0.Document.all.userid.Value = "Ken3" 'ユーザー名
     Me!WebBrowser0.Document.all.pass.Value = "aaa"    'パスワード

     'フォームをSubmitする
     Me!WebBrowser0.Document.Forms(0).Submit

End Sub
単に、objIEがMe!WebBrowser0になっただけ と CreateObjectがなくなった(フォームにあらかじめ配置しているので) そんな感じでした。 ↑Accessフォーム上でのテスト実行結果

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

今回は、 IE操作、フォームの送信処理で、 objIE.document.forms(0).Submit と、 ドキュメント内のフォームオブジェクトに対して、 .Submit してみました。 IEお嬢様は、ナンパの攻略本が少ないから(資料が少ないから) なかなか、攻略するの大変そうです。 困ったときのキーを送っちゃえ、SendKeys攻撃が効かないと特に。 私最近は町にナンパしに行く元気ないので、調べてないです。 でも、皆さんが攻略できなかった、 あの子手ごわいよなんて話を聞くと、落としてみたくなったりして。 ※まわりくどいんだよ、気軽に質問ください、  IE操作、気になったら一緒に調べますよでいいじゃん(笑) ですね。町でナンパしたことないのに、 ナンパ師チャラ君達の心境をマネてもボロ出ちゃうよね。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
関連項目(ただのバックナンバー紹介)
インターネットエクスプローラーの操作 http://www.ken3.org/cgi-bin/group/vba_ie.asp で、下記のリンクまとめてます。 No.50 IE起動 CreateObject("InternetExplorer.application") No.52 InternetExplorer.application .document.body.innerText No.53 文字列を探す、InStr関数の使い方 No.70 InternetExplorer.application .document.all(0).innerHTML No.71 IE操作 リンク先を取出す .Document.links(i).href も参考にしてください。

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.105を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります


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

[三流君(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 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

書籍の購入

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

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

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

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

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