

VBAでIE11のサイトを操作し、ダウンロード通知バーの「保存(S)」を押したいと考えています  
以下の通りコードを書き、IEが既に起動している場合は、最後の「InvokePattern.Invoke」が成功し、ダウンロードファイルを保存できます。  
問題は、IEを起動していない場合は新しくIEを開いてsetしているのですが、オブジェクトが上手く取得できていないらしく、「InvokePattern.Invoke」の箇所がスルーされているようで、「保存(S)」を押せていないまま終了してしまいます。  
どこを修正すればよいのか教えていただけないでしょうか。よろしくお願いいたします。

[code]

    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Declare PtrSafe 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 PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    
    Sub データ取得()
    
    Dim ie As Object
    Dim objInpTxtArea As HTMLTextAreaElement
    Dim Button As HTMLInputElement
    
    
    '参照設定　Microsoft HTML Object Library
    
        Set ie = getIE
        Call ie.navigate("http://1.2.3.4/logon.do")
        ie.Visible = True
    
        Do While ie.busy Or ie.readystate < 4
            DoEvents
            Sleep (10)
        Loop    
    
        'IDとパスワードを入れてログイン
        Set objInpTxtArea = ie.document.getElementsByName("user")(0)
    
        '検索条件などの操作を入力
    
        'ダウンロードボタンを押す
        Set Button = ie.document.getElementById("dButton")
        Button.Click
        Set Button = Nothing
    
    
    Dim AutomationObj As IUIAutomation
    Dim WindowElement As IUIAutomationElement
    Dim button2 As IUIAutomationElement
    Dim hWnd As Long
    
    Set AutomationObj = New CUIAutomation
    
    hWnd = ie.hWnd
    hWnd = FindWindowEx(hWnd, 0, "Frame Notification Bar", vbNullString)
    If hWnd = 0 Then Exit Sub
    
    SetForegroundWindow (hWnd)
    Sleep 8000
    
    Set WindowElement = AutomationObj.ElementFromHandle(ByVal hWnd)
    Dim iCnd As IUIAutomationCondition
    Do
    DoEvents
    Sleep 1&
    Set iCnd = AutomationObj.CreatePropertyCondition(UIA_NamePropertyId, "保存")
    Loop While iCnd Is Nothing
    
    Set button2 = WindowElement.FindFirst(TreeScope_Subtree, iCnd)
    Dim InvokePattern As IUIAutomationInvokePattern
    Set InvokePattern = button2.GetCurrentPattern(UIA_InvokePatternId)
    InvokePattern.Invoke
    
    End Sub
    
    Public Function getIE() As Object
        Dim objSh As Object
        Dim objW As Object
        Dim i As Integer
    
        'IEがすでに立ち上がっている場合はそれを活用する
        Set objSh = CreateObject("Shell.Application")
        For i = objSh.Windows.Count To 1 Step -1
            Set objW = objSh.Windows(i - 1)
            If objW.FullName Like "*IEXPLORE.EXE" Then
              Set getIE = objW
              Exit Function
            End If
        Next
    
        '見つからなかった場合は新規作成する
        Set getIE = New InternetExplorer
        getIE.Visible = True
    
    End Function
    
[/code]


CC BY-SA 3.0
2017-12-20T05:20:40.517
40413
2017-12-20T08:01:11.410
2017-12-20T08:01:11.410
76
9807
question
vba internet-explorer
IE11のダウンロード通知バーをVBAで操作したい