Automate saveas dialogue for IE9 (vba)

前端 未结 3 705
遥遥无期
遥遥无期 2020-11-27 08:28

I am trying to download an excel sheet from a website. I have thus far achieved until clicking the download button automatically (web scraping). Now ie9 is popping a save as

3条回答
  •  -上瘾入骨i
    2020-11-27 09:01

    'This is a working code for vba in excel 2007 to open a file
    'But you need to add the "UIAutomationCore.dll" to be copied 
    'from "C:\Windows\System32\UIAutomationCore.dll" into the 
    'path "C:\Users\admin\Documents"    
    'The path where to copy may be different and you can find it when you check on 
    'the box for UIAutomationClient - the location is given under it.
    'Tools-references
    
    Option Explicit
      Dim ie As InternetExplorer
      Dim h As LONG_PTR
      Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LONG_PTR, ByVal hWnd2 As LONG_PTR, ByVal lpsz1 As String, ByVal lpsz2 As String) As LONG_PTR
    
    
    Sub click_open()
      Dim o As IUIAutomation
      Dim e As IUIAutomationElement
      Dim sh
      Dim eachIE
    
    Do
    
        Set sh = New Shell32.Shell
         For Each eachIE In sh.Windows
             ' Check if this is the desired URL
    
        ' Here you can use your condition except .html
        ' If you want to use your URL , then put the URL below in the code for condition check.
        ' This code will reassign your IE object with the same reference for navigation and your issue will resolve.
             If InStr(1, eachIE.LocationURL, "") Then
             Set ie = eachIE
             Exit Do
             End If
         Next eachIE
     Loop
    
    Set o = New CUIAutomation
    h = ie.Hwnd
    h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
    If h = 0 Then Exit Sub
    
    Set e = o.ElementFromHandle(ByVal h)
    Dim iCnd As IUIAutomationCondition
    Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Open")
    
    
    Dim Button As IUIAutomationElement
    Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
    Dim InvokePattern As IUIAutomationInvokePattern
    Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
    InvokePattern.Invoke
    
    End Sub
    

提交回复
热议问题