人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBAでIEを操作する方法について見識がある方にお伺いします。お気持ちのみですが合計200P程。
IEでダウンロードボタンを押す方法について教えて下さい。

今、以下のformをsubmitすると、alert無しで「ファイルのダウンロード」ダイアログが出ます。
<form action="https:****.co.jp" method="post" name="printItems" target="_blank">
・・・
</form>
formをsubmitし、開くダイアログボックスを補ていするまではプログラムできました。
この後、「開く(O)」「保存(S)」「キャンセル」のうち「保存(S)」をクリックしたいのですが、コメント欄に示すプログラムではうまくいきません。方法を教えて頂けませんでしょうか。

尚、以下のページを参考にしています。

参考:PostMessageのパラメータの説明
http://yokohama.cool.ne.jp/chokuto/urawaza/api/PostMessage.html
参考:IE7「ファイルのダウンロード」のクリック
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200901/09010002.txt

●質問者: ReoReo7
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:IE IE7 VBA キャンセル クリック
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント

私は どこからか拾ってきた以下のやり方で ボタンを クリックさせてます。

が、たまーーに 反応しないときがあるようで・・・。

 Dim objINPUT As Object  'Inputタグ格納用

 For Each objINPUT In objIE.document.all.tags("INPUT")  'Inputのタグを.allから抜く
 If objINPUT.Value = "ログイン" Then
 objINPUT.Click  '見つけたINPUTオブジェクト(ボタン)を.Clickクリックする
 Exit For  '用が済んだので(見つかったので)ループを抜ける
 End If
 Next
◎質問者からの返答

いつもありがとうございます。

ken3memoさんのプログラムですね。

ありがとうございます、書き忘れてしまったので申し訳ないのですが、コメント欄にプログラムを書いてあります。そこでは、clickするまではできたのですが、ダイアログボックスのボタンを押すのに苦戦中、ということを書いています。質問が言葉足らずで申し訳ありませんです。


2 ● ko8820
●150ポイント ベストアンサー

'親ウィンドウ取得

strCaption = "ファイルのダウンロード"

pWnd = FindWindowEx(0, 0, vbNullString, strCaption)

'保存ボタンのハンドル

cWnd = FindWindowEx(pWnd, 0&, "Button", "保存(&S)")

pWndがNULLかどうかをまず確認しましょう。

ウインドウハンドルがうまく取得できてない可能性があります。

strCaption にはウインドウの名前が入りますから、IEやOSのバージョンによって変わりますよ。

次にボタンのハンドルcWnd がちゃんと取得できてることを確認してください。

もし、確認してたらごめんなさい。

Sendkeyをつかっても、結局は同じようなソースになりますね。

http://oshiete.goo.ne.jp/qa/1809850.html

◎質問者からの返答

ありがとうございます。Sendkeyを使って機能実現したのですが、恐らくPCの性能?によってSendkeys ** , Trueとその次の命令をつなぐ間のウェイト時間を調整しなければならないので、性能の悪いPCだとこれって動かないプログラムだよなぁ?みたいなことを考えながらコーディングしなければなりませんでした。ご教示頂いた方法も参考にしてみます!(とりあえずSendkeysでやってみようかな。。。)

追記:SendKeysでできました。

ただ、これだといくつか問題が出ます。具体的には、IEのReadyStateがCOMPLETEではなくINTERACTIVEのままになったり(条件は忘れました。ダイアログボックスを実行後次のページに進むときに問題になるんだったかな・・・)、ダイアログボックスの決定の際にWaitで見積り時間をエイヤで決めて余裕を持ってプログラム動作させなければいけないことです。

やっぱりSendKeysではなくてボタンをしっかり制御できるように教えて頂いた方法で改良していくことが肝要のようですね。。

あっでも「ウインドウハンドルがうまく取得できてない可能性がある」と「ウィンドウキャプションはIEのバージョン依存」の問題があるのか。後者はともかく、前者は時間ごとに定期的に取得しにいって、必ずループを抜ける処理にならないとSendKeysと変わりないですね。。

更に追記:「IEのReadyStateがCOMPLETEではなくINTERACTIVEのままになったり」←この問題は、ダイアログボックス出現前のobjIE.hWndを記録しておいて、ダイアログボックス入力後に戻すことで解決可能かも。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ