「input type=file 」のファイルダイアログの開き方について 削除
Message#9 2017年1月11日(水)22時21分 From: ゆうじ |
初めまして。ゆうじと申します。 先月、同僚よりExcel VBAからIEを制御できることを教えてもらい、 こちらのサイトや書籍を参考に勉強させて頂いております。 (端的に言えば、ど素人です) お礼の気持ちを込めて、このスレッドで記載されている方法とは 違う方法なのですが、標題のファイル選択の自動化が出来た 一事例として報告させて頂きます。 #社内で利用しているシステムで、ファイルを添付するための #ファイル選択処理の自動化を目的に色々調べて試行錯誤しました。 #。 #IEのバージョンは、11.0.9600.18537。更新バージョンは、11.0.38(KB3203621) #Windowsは、Windows7 Professional バージョン6.1(ビルド 7601:Service Pack 1)です。 #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long '良く判っていないので、とりあえず両方に記載 Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long '良く判っていないので、とりあえず両方に記載 Declare Function ShowWindowAsync Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long '良く判っていないので、とりあえず両方に記載 #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long '良く判っていないので、とりあえず両方に記載 Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long '良く判っていないので、とりあえず両方に記載 Declare Function ShowWindowAsync Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long '良く判っていないので、とりあえず両方に記載 #End If Sub sample_file_select_auto() Dim objIE As InternetExplorer '起動済みのテスト用フォームページを制御する Set objIE = ieFind("http://www.vba-ie.net/code/test.html") 'SendKeysを確実に狙ったオブジェクトに送るため、ウィンドウを最前面に表示する 'ウィンドウが最小化されているかのチェック If IsIconic(objIE.hWnd) Then ShowWindowAsync objIE.hWnd, SW_RESTORE End If 'IEを最前面に表示 SetForegroundWindow (objIE.hWnd) ' 旨くいった。SendKeysの第二引数:Trueを明示 ' 最初は、第二引数を省略(SendKeysの仕様を良く判っていなかった)し、 ' SendKeysの後に、sleepを入れたが旨くいかなかった ' 'ファイル選択をクリック objIE.document.getElementsByName("img")(0).Focus SendKeys "{Tab}", True SendKeys " ", True Sleep 500 SendKeys "*** ファイルパス ***", True SendKeys "{Tab 2}{Enter}", True End Sub このスレッドで話題になっているsubmitボタンクリック時のエラーは、 私が実際に試行している社内のシステムでは発生せず、 無事にファイル添付できています。 #このSendKeysのやり方を参考にさせて頂いたのは、下記URLです # http://language-and-engineering.hatenablog.jp/entry/20100909/p1 汎用的な一事例になるのか心配な点としては、下記2点(ど素人考えですが) 1.INPUTタグに type=file が明記されていない 実際の記述は以下の通り。 <INPUT id=FileInput_oafileUpload title=ファイルおよびパス入力 size=50 type=file name=FileInput_oafileUpload> この記述で何故か、type=fileが明記されている時と同じ画面になっており、 .valueへの代入もできません。 2.ファイル選択後の登録処理は、submitボタンではなく、 BUTTONタグでonclickでJavaScript(なのかな?)処理になっています。 同じ悩みを抱えている方に、どれだけお役に立てるか判りませんが、 少しでもお役に立てられれば、幸いです。 |
上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。