<input type=file>のファイルダイアログを制御するには?

解決


appa  2005-03-10 23:40:15  No: 88790

HTMLの<input type=file>の「value」には値を送れないので,
「Click」で開かれるファイルダイアログに値を送りたいのですが。
できればその後,「開く」ボタンにも「Click」を送りたいと思います。
sendkeysではどうも上手くいかなくて,このファイルダイアログを
操作する方法を教えてください。


LESIA  2005-03-11 00:30:59  No: 88791

"c:\test\test.jpg"を送りたい場合
<input type=file>が複数あるとうまくいかないかも(^^;

Dim objElement As Object

For Each objElement In WebBrowser1.Document.getElementsByTagName("INPUT")
    If objElement.Type = "file" Then
        objElement.Focus
        SendKeys "{TAB} c:\test\GC0112C.jpg{ENTER}"
    End If
Next objElement


LESIA  2005-03-11 00:32:49  No: 88792

あ、間違えた
SendKeys "{TAB} c:\test\test.jpg{ENTER}"
ですね。


appa  2005-03-11 00:47:56  No: 88793

LESIA様、早速のご返答ありがとうございます。
現在、下記のコードでファイルダイアログを開いた状態です。

Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Navigate "URL"
objIE.document.all.ボタン.Click

このコード後に、LESIA様のご返答にある「WebBrowser1.Document…」の箇所を「objIE.Document…」として実行してみました。
結果ファイルダイアログには値は送られず、ダイアログ終了後に、開かれているWebページに「sendkeys」が送られるという結果となりました。
私の現在のコードがおかしい可能性が高いのですが。
申し訳ありません。稚拙な私のコードの場合でのご助言をお願いいたします。


LESIA  2005-03-11 01:13:11  No: 88794

ページが表示される前に処理してしまってるからでしょう。

Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Navigate "URL"

Do While objIE.Busy = True
    DoEvents
Loop

Do While objIE.Document.ReadyState <> "complete"
    DoEvents
Loop

objIE.document.all.ボタン.Click

Do While objIE.Busy = True
    DoEvents
Loop

Do While objIE.Document.ReadyState <> "complete"
    DoEvents
Loop


appa  2005-03-11 01:15:19  No: 88795

「objIE.document.all.ボタン.Click」を実行しないで、LESIA様のコードを実行してみましたが、やはり<type=input>なので、値を入力(sendkeys)することはできませんでした。
クリップボードに入れた値を貼り付けようとも考えたのですが、貼り付けのキーも受け付けないようです…。


appa  2005-03-11 01:26:53  No: 88796

何度もご返答ありがとうございます。
すいません文章を送信後にLESIA様のご返答に気づきまして。

Do While objIE.Busy = True
    DoEvents
Loop

Do While objIE.Document.ReadyState <> "complete"
    DoEvents
Loop

のコードは私も実行しておりまして。
待ち時間を強引にもうけても、<input type=file>ボタンをクリック後に開かれるファイルダイアログには、「sendkeys」できません…。
このファイルダイアログが開いたとき、フォーカスはファイル名入力の場所にちゃんと移っております。


LESIA  2005-03-11 01:34:46  No: 88797

SendKeysするデータは、{TAB}とファイル名の間にはスペースが必要なんですが
入れてますでしょうか?(^^;
問題なければ、そのページのURLを教えていただければ、こちらでもテストが
出来るんですが・・・


INA  2005-03-11 01:42:03  No: 88798

マルチポストはマナー違反だと思います。


LESIA  2005-03-11 02:01:55  No: 88799

マルチポストだったのか・・・でも、ひとつだけ。

SendKeysするデータの最後の{ENTER}はファイルダイアログの[開く]ボタンを
クリックするもので、ファイルダイアログは一瞬で閉じてしまい、SendKeys
出来たかどうか確認することは不可能だと思いますが(^^;
<input type=file>のテキストボックスの部分にファイル名が入ってたら
うまくいったことになります。


appa  2005-03-11 02:13:26  No: 88800

すいません初めてQ&A掲示板を利用したもので,マナーを知らずに申し訳あり
ませんでした。

LESIA様,何度も丁寧なご返答をどうもありがとうございます。
実験しているページは,
<input type=file>
を記述しただけのhtmlファイルです。
やはりファイルダイアログが開いたままでした。
LESIA様,何度も本当にありがとうございました。
マナー違反だったもので,ここで解決とさせていただきます。


LESIA  2005-03-11 02:46:37  No: 88801

ひとつずつSendKeysして、どこまでうまくいくか確認してみるとか。
(1)SendKeys "{TAB}" '参照ボタンにフォーカスが移る
(2)SendKeys "{TAB} " 'ファイルダイアログが表示される。
(3)SendKeys "{TAB} c:\test\test.jpg" 'ファイル名が入力される
(4)SendKeys "{TAB} c:\test\test.jpg{ENTER}" '[開く]ボタンがClickされる

って、もう解決したんですね(T_T)


INA  2005-03-11 03:19:19  No: 88802

>って、もう解決したんですね(T_T)

こちらが情報元です。
http://www2.moug.net/app/bbs/message.php?cat=exvba&id=20050310-000026


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加