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

LoginRegistrati
Stai vedendo 13 articoli - dal 1 a 13 (di 13 totali)
  • Autore
    Articoli
  • #16307 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 Risposta

      vecchio frac
      Senior Moderator
      • Sfida #1
        157 pts

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

        #16324 Risposta
        zer0kelvin
        zer0kelvin
        Partecipante
          3 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 Risposta
          zer0kelvin
          zer0kelvin
          Partecipante
            3 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 Risposta

            vecchio frac
            Senior Moderator
            • Sfida #1
              157 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 Risposta

              vecchio frac
              Senior Moderator
              • Sfida #1
                157 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 Risposta
                zer0kelvin
                zer0kelvin
                Partecipante
                  3 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 Risposta

                  vecchio frac
                  Senior Moderator
                  • Sfida #1
                    157 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 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 Risposta

                      plastikoso
                      Partecipante

                        Ho provato:

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

                        ma non funziona...

                        #16342 Risposta
                        zer0kelvin
                        zer0kelvin
                        Partecipante
                          3 pts

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

                          #16343 Risposta

                          plastikoso
                          Partecipante

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

                            #16344 Risposta

                            plastikoso
                            Partecipante

                              Forse ci sono:

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

                              vedo ora se riesco ad interagire con la pagina..

                               

                            LoginRegistrati
                            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:



                            vecchio frac - 2388 risposte

                            albatros54
                            albatros54 - 670 risposte

                            patel
                            patel - 541 risposte

                            Marius44
                            Marius44 - 448 risposte

                            Luca73
                            Luca73 - 432 risposte