[三流君]
[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系の→[掲示板]←を覗く、質問を書き込む
評価・感想
ページフッター(リンクや広告など)
[三流君(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に流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・