2012-05-01 16 views
10

Questa è la mia prima domanda in assoluto su StackOverflow!Automazione Internet Explorer VBA - Come selezionare "Apri" durante il download di un file

Sono stato alla ricerca di una soluzione a questo problema per un po 'e non ho trovato alcun aiuto. Forse sto usando le parole chiave sbagliate nelle mie ricerche, ma finora non ho avuto fortuna. Ecco la domanda:

In VBA, come è possibile selezionare l'opzione "Apri" dalla finestra di download del file in Internet Explorer?

Solo per ulteriori chiarimenti, sto parlando della barra giallo-arancione che si apre nella parte inferiore dello schermo in IE9 quando viene scaricato un file.

Sto facendo un po 'di automazione VBA per scaricare centinaia di PDF dal web utilizzando Internet Explorer, ma c'è una fase intermedia in cui un file .fdf deve essere aperto prima di arrivare al PDF reale. Quindi prima devo selezionare l'opzione "Apri" in modo che possa passare al prossimo passo dell'automazione. Come ho detto prima, ho fatto molte ricerche e finora non ho avuto fortuna.

Ho provato a utilizzare SendKeys nella speranza che colpire Inserire funzionerebbe, e quello era un ultimo tentativo di fossa che non ha funzionato.

Grazie in anticipo per l'aiuto!

+1

+ 1 Una buona domanda :) –

+0

Hai pensato di usare URLDownloadToFile per andare a prendere direttamente i file? http://www.vbaexpress.com/forum/showthread.php?t=33145 –

+1

In realtà ho provato URLDownloadToFile, ma tutti questi file sono su un sito protetto da password e non sono stato in grado di capire come passare le credenziali . –

risposta

4

Ho coperto questo ampiamente qui.

Topic: VBA/VB.Net/VB6-Fare clic su Apri/Salva/Annulla Tasto su IE finestra di download - PARTE I

link: http://www.siddharthrout.com/2011/10/23/vbavb-netvb6click-opensavecancel-button-on-ie-download-window/

e


EDIT (IMP) Se si utilizza IE 9 Non dimenticare di leggere PARTE 2 poiché include e copre la struttura finestra della finestra di download di IE 9


Topic: VBA/VB.Net/VB6-Fare clic su Apri/Salva/Annulla Tasto su IE finestra di download - PARTE II

Link: http://www.siddharthrout.com/2012/02/02/vbavb-netvb6click-opensavecancel-button-on-ie-download-window-part-ii/

I suddetti collegamenti discutono su come utilizzare le API per ottenere ciò che si desidera.

Dal 1 link ...

come te e me, abbiamo entrambi i nomi, in modo simile le finestre hanno “maniglie” (hWnd), classe ecc Una volta che sai quello che hWnd è, è più facile interagire con quella finestra.

API Findwindow trova l'hWnd di una finestra particolare utilizzando il nome classe e la didascalia della finestra ("Download file") in questo caso.I pulsanti "Apri", "Salva" e "Annulla" sono finestre in sé, ma sono finestre secondarie della finestra principale che è "Scarica file". Ciò significa che ognuno di questi avrà anche un hWnd :) Per trovare le finestre secondarie, non usiamo FindWindow ma usiamo FindWindowEx. Tutti e tre i pulsanti "Apri", "Salva" e "Annulla" hanno la stessa classe che è "Pulsante".

+0

Sono abbastanza nuovo per VBA, quindi non sono sicuro di come utilizzare l'API FindWindowEx. Ho inserito la dichiarazione della funzione nel mio codice e ho detto che doveva essere aggiornato per un sistema a 64 bit. –

+0

Hai già finito di leggerlo? :) –

+0

Appena aggiunto l'attributo PtrSafe, che sembrava risolvere le cose. Vado a fare un tentativo ora. –

1

post simile: link

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, "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

Questo ha 'Dim o As IUIAutomation', ma poi' Set o = New CUIAutomation', quindi uno dei due mi sembra sbagliato? So molto poco su VBA, quindi non sono sicuro di quale dovrebbe essere regolato ;-) – Carpetsmoker

0

ho inviato i tasti di scelta rapida per l'applicazione. Eccoli per IE11. Mi spiace di non aver potuto provare in IE9. Se tieni premuto Alt, potrebbe mostrarti l'altra chiave della combo come fa 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. chiave

  • di scelta rapida: Alt +O
  • VBA: Application.SendKeys "%{O}"
Problemi correlati