Automatizzare saveas dialogo per IE9 (vba)

Sto cercando di scaricare un foglio excel da un sito web. Ho finora ottenuti fino ad clic sul pulsante download automaticamente (web scraping). Ora ie9 è popping un salva schermo. Come posso automatizzare?

InformationsquelleAutor ramses1592 | 2014-09-25

3 Replies
  1. 10

    Si può provare questo, come si è lavorato per me su IE9:

    Automatizzare saveas dialogo per IE9 (vba)

    1. Copia del file C:\Windows\System32\UIAutomationCore.dll file per gli utenti dei Documenti.e C:\Users\admin\Documents poi aggiungi riferimento UIAutomationClient per il tuo file di macro.
    2. Incollare il codice seguente nel modulo:

          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   

    Provare.

    Quando cerco di aggiungere refernence per UIAutomationClient è lanciare un messaggio di errore : “Errore di caricamento della DLL”.
    devi copiare il file UIAutomationCore.dll alla cartella dei documenti.
    PtrSafe non è sempre riconosciuto. Si dice Previsto: Sub o Function
    Attenzione! Se sei straniero, e quindi correttamente si dovrebbe cambiare il nome del pulsante invece di “Salva” come “Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, “열기”)”
    Come per chiudere la finestra dopo If h = 0 Then Exit Sub ?

    InformationsquelleAutor Lifewithsun

  2. 0
    '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

    InformationsquelleAutor Tuhinansu Gourav

  3. 0

    Ho inviato i tasti di scelta rapida per IE11.

    Nota: il codice non viene eseguito come previsto se IE non è la finestra attiva sulla macchina in modo da non lavorare, mentre in modalità di debug. I tasti di scelta rapida e come inviare loro sono al di sotto.

    • Tasto di scelta rapida:Alt+S
    • VBA: Application.SendKeys "%{S}"

    InformationsquelleAutor Tony L.

Lascia un commento