Automate saveas dialogue for IE9 (vba)

前端 未结 3 626
遥遥无期
遥遥无期 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条回答
  • 2020-11-27 08:41

    I sent the shortcut keys to IE11.

    Note: the code will not run as you expect if IE is not the active window on your machine so it won't work while in debug mode. The shortcut keys and how to send them are below.

    • Shortcut key:Alt+S
    • VBA: Application.SendKeys "%{S}"
    0 讨论(0)
  • 2020-11-27 08:53

    You may try this as it is worked for me on IE9:

    For below showed download

    1. Copy file C:\Windows\System32\UIAutomationCore.dll file to users Documents i.e C:\Users\admin\Documents then add reference UIAutomationClient to your macro file.
    2. Paste below code in your module:

          Option Explicit
          Dim ie As InternetExplorer
          Dim h As LongPtr
          Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
      
      Sub Download()
          Dim o As IUIAutomation
          Dim e As IUIAutomationElement
          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, "Save")
      
          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   
      

    Try at your end.

    0 讨论(0)
  • 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, "<enter your page url>") 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
    
    0 讨论(0)
提交回复
热议问题