› Sviluppare funzionalita su Microsoft Office con VBA › Vba web – interfacciare finestra IE già aperta
-
AutoreArticoli
-
Ho trovato e testato molti esempi di dialogo da vba excel con finestre web che vengono aperte al momento, ma dovrei interagire con sessioni IE già aperte, frutto di applicativi che girano su intranet.
Come posso fare?
Grazie in anticipo.
Mi sa che devi smanettare con le API (FindWindow e compagnia)
Salve a tutti.
Penso che invece di usare FindWindow, che restituisceun Handle, sia più proficuo usare GetObject, che restituisce direttamente un oggetto con cui possiamo interagire.
Bisogna solo conoscere il nome della classe dell'oggetto; per esempio, nel caso di Excel
Sub test() Dim oo As Object Set oo = GetObject(, "Excel.Application") MsgBox oo.Name MsgBox oo.ActiveWorkbook.Name End Sub
PS: ho provato con GetObject ma ottengo un errore; comunque, su StackOverflow ho trovato questa function che sembra funzionare adeguatamente
Function GetIE() As Object Dim ShellApp As Object, ShellWindows As Object Dim IEObject As Object Set ShellApp = CreateObject("Shell.Application") Set ShellWindows = ShellApp.Windows() Dim item As Object On Error GoTo 0 Dim sName As String For Each ObjWind In ShellWindows 'On Error Resume Next If (Not ObjWind Is Nothing) Then sName = ObjWind.Name If sName = "Internet Explorer" Then Set IEObject = ObjWind Exit For 'No need to continue.... End If End If Next If IEObject Is Nothing Then Set IEObject = CreateObject("InternetExplorer.Application") Set ShellApp = Nothing Set GetIE = IEObject End Function
Penso che invece di usare FindWindow, che restituisce un Handle, sia più proficuo usare GetObject
Davvero ottimo. Era la prima cosa cui avevo pensato senza approfondire, ma la tua obiezione è giusta.
ho provato con GetObject ma ottengo un errore
A me funziona perfettamente senza errori il tuo primo test (Excel 2007 a 32 bit).
A me funziona solo con Excel.Application, ma il mio sistema avrebbe bisogno di un riavvio dato che il PC è in funzione da più di due settimane...
Inoltre modificando il codice trovato in rete, sarebbe anche possibile gestire facilmente istanze multiple di IE, cosa che, mi sembra, GetObject non permette.
il PC è in funzione da più di due settimane
Questo l'ho impostato così: un'attività schedulata alle 20 lo mette in stand by, lo riattiva alle 01:00, esegue un piccolo script python che controlla le mail (e fa qualcosa in funzione di determinati contenuti) e lo stato del db Access condiviso con i miei utenti durante la giornata (e fa qualcosa in funzione del giorno appena trascorso), poi lo rimette in stand by.
Al mattino muovo il mouse e trovo il sistema fresco come una rosa
zer0kelvin ti ringrazio, mi manca ora il passo successivo: come apro una istanza per dialogare con la sessione IE trovata?
Scusa se rompo...
Ho provato:
If IEObject.LocationName = "mySession" Then
Set objFisc = GetObject("InternetExplorer.Application", IEObject.LocationName)
End Ifma non funziona...
Per aprire una nuova istanza puoi usare CreateObject("InternetExplorer.Application").
Dovrei solo "connettermi" all'istanza già presente...
Forse ci sono:
Set objFisc = CreateObject("InternetExplorer.Application")
objFisc.Navigate IEObject.LocationURLvedo ora se riesco ad interagire con la pagina..
-
AutoreArticoli