「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(なのかな?)処理になっています。


同じ悩みを抱えている方に、どれだけお役に立てるか判りませんが、
少しでもお役に立てられれば、幸いです。

上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。

パスワード:

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com