質問: ExcelVBAで、IEを操作してます。 submitでダウンロードダイアログが表示される HPで、ダウンロードダイアログを操作したい(保存、ファイル名指定)のですがどういう方法がありますか? 対象オブジェクト.sendkeysも考えましたが 対象オブジェクトが何であるのかわかりません。 どうかよろしくお願いします。
回答: >やれるならsendkeysでやろうと思っています。 個人的には、このメソッドは嫌いですが、sendkeysでやることに反対はしません。 徹夜サポで暇してます。 ここを参考にやってみました。 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