- 締切済み
ダウンロードダイアログをVBAから操作するには?
ExcelVBAで、IEを操作してます。 submitでダウンロードダイアログが表示される HPで、ダウンロードダイアログを操作したい(保存、ファイル名指定)のですがどういう方法がありますか? 対象オブジェクト.sendkeysも考えましたが 対象オブジェクトが何であるのかわかりません。 どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>やれるならsendkeysでやろうと思っています。 個人的には、このメソッドは嫌いですが、sendkeysでやることに反対はしません。 徹夜サポで暇してます。 ここを参考にやってみました。 http://okwave.jp/kotaeru.php3?q=894824 sendkeysは使用しておりませんが、もし使用する場合にも参考になるかと思います^^ Option Explicit Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long Private Const WM_COMMAND As Long = &H111 Private Const CLASSNAME_ダイアログ As String = "#32770" Private Const CLASSNAME_ボタン As String = "Button" Private Sub Test() Const STEP1_TITLE As String = "ファイルのダウンロード" Const STEP2_TITLE As String = "名前を付けて保存" Dim l_lngWnd_Window_Step1 As Long Dim l_lngWnd_Window_Step2 As Long 'step1 If Not FindDialog(STEP1_TITLE, l_lngWnd_Window_Step1) Then Exit Sub End If Call PushSaveBtn(l_lngWnd_Window_Step1) 'step2 If Not FindDialog(STEP2_TITLE, l_lngWnd_Window_Step2) Then Exit Sub End If Call PushSaveBtn(l_lngWnd_Window_Step2) End Sub 'ダイアログを探す Private Function FindDialog(ByVal p_strCaption As String, ByRef p_lngFindWnd As Long) As Boolean p_lngFindWnd = 0 Do DoEvents ' If Not IEがBUSY Then ' Exit Do ' End If p_lngFindWnd = FindWindow(CLASSNAME_ダイアログ, p_strCaption) Loop While p_lngFindWnd = 0 FindDialog = p_lngFindWnd <> 0 End Function 'ボタンを押す Private Sub PushSaveBtn(ByVal p_lngWindowWnd As Long, Optional p_strBtnCaption As String = "保存(&S)") Dim l_lngWnd_Save As Long l_lngWnd_Save = FindWindowEx(p_lngWindowWnd, 0, CLASSNAME_ボタン, p_strBtnCaption) Call SendMessage(p_lngWindowWnd, WM_COMMAND, GetDlgCtrlID(l_lngWnd_Save), ByVal l_lngWnd_Save) End Sub
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
確かXPのSPの状況によって、ダウンロードダイアログの出方が異なったと思います。 さらにOS別を考慮すると、さらにパターンが増えます。 個別のSendKeysパターンを網羅するプログラムを組むか、WM_COMMANDでOKボタンを押させる必要があると思います。 http://okwave.jp/kotaeru.php3?q=199357
補足
ご回答ありがとうございます。 対象OSは限定ですので(XP SP2) やれるならsendkeysでやろうと思っています。 sendkeysを送るタイミングも不明で、 busyを検知しておけばいいかと思ったら、 ダウンロードダイアログが表示してる間はbusyの ようで状況把握を何のプロパティで確認すれば よいかわかりません。
お礼
大変助かりました。メドがつきそうです。 sendkeysは使わずにやってみます。 ありがとうございました。