2014-09-25 8 views
6

Sto provando a scaricare un foglio excel da un sito web. Finora ho raggiunto il risultato fino a quando non faccio clic sul pulsante di download automaticamente (scraping web). Ora ie9 sta scoppiando un salvataggio come schermo. Come lo automatizzo?Automatizza dialoghi saveas per IE9 (vba)

risposta

9

Si può provare questo come si lavora per me su IE9:

For below showed download

  1. Copiare il file C:\Windows\System32\UIAutomationCore.dll file per gli utenti Documenti cioè C:\Users\admin\Documents quindi aggiungere riferimento UIAutomationClient al file macro.
  2. Incolla sotto il codice 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 
    

Prova a vostra fine.

+1

quando sto provando ad aggiungere refernence a UIAutomationClient sta gettando un errore: "Errore di caricamento della DLL". – ramses1592

+2

devi copiare il file 'UIAutomationCore.dll' nella tua cartella documenti. – Lifewithsun

+1

'PtrSafe' non viene riconosciuto. Previsto * Previsto: Sottostante o Funzione * – xameeramir

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 
0

Ho inviato i tasti di scelta rapida a IE11.

Nota: il codice non verrà eseguito come previsto se IE non è la finestra attiva sulla macchina in modo che non funzioni in modalità di debug. I tasti di scelta rapida e come inviarli sono di seguito.

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