Sviluppare funzionalita su Microsoft Office con VBA Vba web – interfacciare finestra IE già aperta

Login Registrati
Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
  • Autore
    Articoli
  • #16307 Score: 0 | Risposta

    plastikoso
    Partecipante

      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.

      #16314 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        246 pts

        Mi sa che devi smanettare con le API (FindWindow e compagnia)

        #16324 Score: 0 | Risposta

        zer0kelvin
        Partecipante
          5 pts

          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
          
          #16325 Score: 0 | Risposta

          zer0kelvin
          Partecipante
            5 pts

            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
            #16328 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              246 pts

              zer0kelvin ha scritto:

              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.

              #16329 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                246 pts

                zer0kelvin ha scritto:

                ho provato con GetObject ma ottengo un errore

                A me funziona perfettamente senza errori il tuo primo test (Excel 2007 a 32 bit).

                #16331 Score: 0 | Risposta

                zer0kelvin
                Partecipante
                  5 pts

                  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.

                  #16332 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    246 pts

                    zer0kelvin ha scritto:

                    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   

                    #16337 Score: 0 | Risposta

                    plastikoso
                    Partecipante

                      zer0kelvin ti ringrazio, mi manca ora il passo successivo: come apro una istanza per dialogare con la sessione IE trovata?

                      Scusa se rompo...

                      #16341 Score: 0 | Risposta

                      plastikoso
                      Partecipante

                        Ho provato:

                        If IEObject.LocationName = "mySession" Then
                        Set objFisc = GetObject("InternetExplorer.Application", IEObject.LocationName)
                        End If

                        ma non funziona...

                        #16342 Score: 0 | Risposta

                        zer0kelvin
                        Partecipante
                          5 pts

                          Per aprire una nuova istanza puoi usare CreateObject("InternetExplorer.Application").

                          #16343 Score: 0 | Risposta

                          plastikoso
                          Partecipante

                            Dovrei solo "connettermi" all'istanza già presente...  

                            #16344 Score: 0 | Risposta

                            plastikoso
                            Partecipante

                              Forse ci sono:

                              Set objFisc = CreateObject("InternetExplorer.Application")
                              objFisc.Navigate IEObject.LocationURL

                              vedo ora se riesco ad interagire con la pagina..

                               

                            Login Registrati
                            Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
                            Rispondi a: Vba web – interfacciare finestra IE già aperta
                            Gli allegati sono permessi solo ad utenti REGISTRATI
                            Le tue informazioni: