You are here:Home-Domande su Excel VBA e MACRO-[RISOLTO] aprire Popup
[RISOLTO] aprire Popup2019-06-14T17:04:32+02:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] aprire Popup

Visualizzazione 20 filoni di risposte
  • Autore
    Post
    • Avatarrobert pyron
      Partecipante
        Post totali: 19

        Salve ,avrei una domanda: è possibile mediante un pulsante far aprire un file Word e nello stesso tempo aprire un Popup (Msgbox sul foglio aperto di Word)  che mi chieda se lo voglio si/no stampare ???

        Grazie :bye:

        • Questo topic è stato modificato 1 anno, 1 mese fa da sidsid.
      • AvatarKris_9951
        Partecipante
          Post totali: 158

          Ciao Robert!

          Io sono riuscito a fare QUASI quello che hai chiesto.

          Il pulsante apre il file word ed immediatamente si apre la finestra di stampa.

          Quindi se vuoi stampare basta solo che premi “OK”, ma niente MsgBox :-(

           

          In più per rendere il codice meno problematico bisognerebbe introdurre un modo per controllare se il file word in questione è gia aperto perchè se si avvia la macro mentre il file word è aperto si pianta tutto.

           

          Io non sono esperto e sono arrivato fino ad un certo punto ma qui ci sono dei luminari del VBA che faranno sicuramente meglio di quello che ho fatto io :-)

          Alla prossima :good:

          https://www.dropbox.com/sh/qh29w41yn34ab9l/AABuH98wgdTUigTNPtyF3Qkya?dl=0

        • AvatarKris_9951
          Partecipante
            Post totali: 158

            A proposito, mi sono dimenticato di dire la cosa più importante!!!!!!!!!!!

            La macro che apre il file Word l’ho presa da uno dei luminari del VBA che ci sono in giro, un certo “SCOSSA”, quindi io mi sono limitato solo ad aggiungere al codice l’apertura della finestra di stampa :-)

          • Avatarrobert pyron
            Partecipante
              Post totali: 19

              Grazie Kris_9951 … è già qualcosa !!! In fondo aperto il file Word  ti da la possibilità di stampare o meno il documento e questo per me era importante …

              Ciao e buona giornata :bye:

            • AvatarKris_9951
              Partecipante
                Post totali: 158

                Ottimo che è già qualcosa ma sono sicuro che prima o poi qualcuno affinerà il codice nel modo corretto per le tue esigenze soprattutto che evitare che si pianti tutto nel caso si faccia girare la macro con il file Word già aperto.

                Buona giornata anche a te :-)

                 

              • Avatarrobert pyron
                Partecipante
                  Post totali: 19

                  Purtroppo anche le mie conoscenze di vba  sono veramente scarse … e non posso far altro che sfruttare il tuo suggerimento … va bhè rimaniamo in trepida attesa :wacko: :bye:

                • AvatarKris_9951
                  Partecipante
                    Post totali: 158

                    Fidati!!

                    Ci sono BySal e Sid che riescono a scrivere le Macro a ritmo di musica!

                  • sidsid
                    Moderatore
                      Post totali: 750

                      ciao a tutti

                      La macro che apre il file Word l’ho presa da uno dei luminari del VBA che ci sono in giro, un certo “SCOSSA”……….

                      Mai sentito :whistle:

                      Faccio il serio va…..Un saluto al grande Scossa, e complimenti a kriss per aver nominato l’autore della macro…non lo fa quasi nessuno.

                      Una possibile soluzione:
                      – abbiamo bisogno di istruzioni per verificare se è aperta un’istanza di word, e nel caso lo fosse invece ci usare CreateObject (per crearla), usiamo GetObject(per sfruttarla).
                      Inserirei questa Function che ho adattato all’esigenza del thread, ma si può adattare per vedere se è aperta qualsiasi app di office

                      Function bRunning(ByVal sApp As String) As Boolean
                      Dim x As Object
                      On Error Resume Next
                      Set x = GetObject(, sApp)
                      bRunning = (Err = 0)
                      Set x = Nothing
                      End Function

                      Il paramentro sApp sarà la stringa passata dalla macro principale

                      Questo il codice con qualche spiegazione:

                      Sub ApriFileWord()
                      Dim objWord As Object, objDoc As Object
                      Dim n As Long
                      Dim sApp As String
                      
                      'paramentro che passo alla function  
                      sApp = "Word.Application"
                      
                      If Not bRunning(sApp) Then
                         Set objWord = CreateObject(sApp)
                      Else
                          Set objWord = GetObject(, sApp)
                      End If
                      
                      On Error Resume Next
                      'qui verifico se il file è aperto, verificando la lunghezza del nome del file;
                      'se è chiuso e senza l'uso di "On Error Resume Next", scatta il debug
                      n = Len(objWord.Documents("prova.docx").Name)
                      
                      'qui verifico la lunghezza del nome del file; se è >0 sigifica che il file è aperto
                      If n > 0 Then
                          ' se il file è aperto gli assegno un riferimento....
                          Set objDoc = objWord.Documents("prova.docx")
                      Else
                          '...altrimenti gli imposto il riferimento alla sua apertura
                          Set objDoc = objWord.Documents.Open(ThisWorkbook.Path & "/" & "prova.docx") 'qui scegli il percorso
                      End If
                      
                      'restituisco ad excel la gestione dell'errore
                      On Error GoTo 0
                      
                      'se il file non è visibile lo rendo tale
                      If Not objWord.Visible = True Then
                          objWord.Visible = True
                      End If
                      
                      'qui ci vanno tutte le istruzioni che vuoi
                      '.................
                      '..................
                      '......................
                      
                      Set objDoc = Nothing
                      Set objWord = Nothing
                      
                      End Sub

                      Spero sia chiaro……ciao :bye:

                    • AvatarKris_9951
                      Partecipante
                        Post totali: 158

                        Robert io te l’avevo detto che prima o poi il mago tirava fuori il coniglio dal cilindro!! 😂😂

                      • Avatarrobert pyron
                        Partecipante
                          Post totali: 19

                          Grazie a tutti per le vostre risposte … ma come  già detto, non ho grosse conoscenze di Vba e quindi cerco di interpretare i vostri consigli … :cry:   ma non sempre riesco comunque grazie di nuovo

                        • sidsid
                          Moderatore
                            Post totali: 750

                            Non si capisce se hai risolto

                          • Avatarrobert pyron
                            Partecipante
                              Post totali: 19

                              No Sid non ho risolto  … allora riepilogando ho copiato  in un Modulo  la <span style=”background-color: #f9f9f9; color: #707070; font-family: Inconsolata, Consolas, Monaco, ‘Lucida Console’, monospace; font-size: 12px; white-space: pre;”>Function bRunning(ByVal sApp As String) As Boolean …ecc</span>

                              poi sul pulsante “Apri file Word” ho copiato il tuo codice inserendo nello spazio che hai indicato <span style=”background-color: #f9f9f9; color: #707070; font-family: Inconsolata, Consolas, Monaco, ‘Lucida Console’, monospace; font-size: 12px; white-space: pre;”>’qui ci vanno tutte le istruzioni che vuoi </span>

                              i l codice che mi aveva precedentemente postato Kriss_9951:

                              Dim objWord

                              Dim objDoc

                              Set objWord = CreateObject(“Word.Application”)

                              Set objDoc = objWord.Documents.Open(“c:\SPARTITI Docm\” & Txt_Brano & “.docm”) ‘qui scegli il percorso

                              objWord.Visible = True

                              VBA.AppActivate objWord.Windows(1).Caption

                              objWord.Dialogs(88).Show

                              Set objDoc = Nothing

                              Set objWord = Nothing

                              Ma mi da un errore.:wacko:

                              Purtroppo non so dove mettere le mani e quindi  avevo rinunciato all’IMPRESA :unsure:

                            • sidsid
                              Moderatore
                                Post totali: 750

                                Per vedere il problema devi postare anche il file (depurato dei dati sensibili) altrimenti non ne usciamo

                              • sidsid
                                Moderatore
                                  Post totali: 750

                                  nel modulo hai messo la function?

                                  Function bRunning(ByVal sApp As String) As Boolean
                                  Dim x As Object
                                  On Error Resume Next
                                  Set x = GetObject(, sApp)
                                  bRunning = (Err = 0)
                                  Set x = Nothing
                                  End Function

                                  Prova il codice così:

                                  Sub ApriFileWord()
                                  Dim objWord As Object, objDoc As Object
                                  Dim n As Long
                                  Dim sApp As String
                                  
                                  'paramentro che passo alla function
                                  sApp = "Word.Application"
                                  
                                  If Not bRunning(sApp) Then
                                     Set objWord = CreateObject(sApp)
                                  Else
                                      Set objWord = GetObject(, sApp)
                                  End If
                                  
                                  On Error Resume Next
                                  'qui verifico se il file è aperto, verificando la lunghezza del nome del file;
                                  'se è chiuso e senza l'uso di "On Error Resume Next", scatta il debug
                                  n = Len(objWord.Documents("prova.docx").Name)
                                  
                                  'qui verifico la lunghezza del nome del file; se è >0 sigifica che il file è aperto
                                  If n > 0 Then
                                      ' se il file è aperto gli assegno un riferimento....
                                      Set objDoc = objWord.Documents("prova.docx")
                                  Else
                                      '...altrimenti gli imposto il riferimento alla sua apertura
                                      Set objDoc = objWord.Documents.Open(ThisWorkbook.Path & "/" & "prova.docx") 'qui scegli il percorso
                                  End If
                                  
                                  'restituisco ad excel la gestione dell'errore
                                  On Error GoTo 0
                                  
                                  'se il file non è visibile lo rendo tale
                                  If Not objWord.Visible = True Then
                                      objWord.Visible = True
                                  End If
                                  
                                  VBA.AppActivate objWord.Windows(1).Caption
                                  objDoc.PrintPreview
                                  
                                    objWord.Dialogs(88).Show
                                  '  Set objDoc = Nothing
                                  '  Set objWord = Nothing
                                  
                                  Set objDoc = Nothing
                                  Set objWord = Nothing
                                  
                                  End Sub
                                • Avatarrobert pyron
                                  Partecipante
                                    Post totali: 19

                                    Scusa Sid  ma non ne vengo a capo … non conosco la sintassi di Vba  e quindi faccio fatica a capire cosa correggere.

                                    Ti posto il file di esempio “Ricerca tramite ListBox.xlsm.”+ una cartella Brani  contenente i file Word relativi che va salvata nel path C:\Brani

                                     

                                    https://www.dropbox.com/s/8su506n4ro866tu/Prova.rar?dl=0

                                  • sidsid
                                    Moderatore
                                      Post totali: 750

                                      Beh…era da adattare ad un altro file

                                      Questo il codice per il pulsante Apri foglio Word del BRANO

                                      Private Sub Cmd_Brano_Click()
                                      
                                      Dim objWord As Object, objDoc As Object
                                      Dim n As Long
                                      Dim sApp As String, sFile As String
                                      
                                      'paramentro che passo alla function
                                      sApp = "Word.Application"
                                      
                                      If Not bRunning(sApp) Then
                                         Set objWord = CreateObject(sApp)
                                      Else
                                          Set objWord = GetObject(, sApp)
                                      End If
                                      
                                      sFile = Txt_BRANO.Value & ".docx"
                                      On Error Resume Next
                                      'qui verifico se il file è aperto, verificando la lunghezza del nome del file;
                                      'se è chiuso e senza l'uso di "On Error Resume Next", scatta il debug
                                      n = Len(objWord.Documents(sFile).Name)
                                      
                                      'qui verifico la lunghezza del nome del file; se è >0 sigifica che il file è aperto
                                      If n > 0 Then
                                          ' se il file è aperto gli assegno un riferimento....
                                          Set objDoc = objWord.Documents(sFile)
                                      Else
                                          '...altrimenti gli imposto il riferimento alla sua apertura
                                          Set objDoc = objWord.Documents.Open(ThisWorkbook.Path & "/Brani/" & sFile) 'qui scegli il percorso
                                      End If
                                      
                                      'restituisco ad excel la gestione dell'errore
                                      On Error GoTo 0
                                      
                                      'se il file non è visibile lo rendo tale
                                      If Not objWord.Visible = True Then
                                          objWord.Visible = True
                                      End If
                                      
                                      VBA.AppActivate objWord.Windows(1).Caption
                                      objDoc.PrintPreview
                                      
                                      objWord.Dialogs(88).Show
                                      
                                      Set objDoc = Nothing
                                      Set objWord = Nothing
                                      
                                      End Sub
                                    • Avatarrobert pyron
                                      Partecipante
                                        Post totali: 19

                                        mi segnala un errore di debug qui :

                                        VBA.AppActivate objWord.Windows(1).Caption

                                        :wacko:

                                      • sidsid
                                        Moderatore
                                          Post totali: 750

                                          A me non da problemi; ti rimando il tuo file

                                          https://app.box.com/s/o202grl4qf9ml9rjl896vqscpnthx4od

                                        • Avatarrobert pyron
                                          Partecipante
                                            Post totali: 19

                                            Sid  perfetto ora funziona … non trovava i file Word da aprire perchè  aveva il path sbagliato.

                                            Ti chiedo un’ultima cosa: è possibile far si che se  cerchi di aprire un file che non trova nella cartella, invece che darmi un errore debug e bloccarsi me lo segnali con un msgbox e me lo renda disponibile per un’altra ricerca ????

                                            Ti ringrazio ciao :bye:

                                          • sidsid
                                            Moderatore
                                              Post totali: 750

                                              è possibile far si che se cerchi di aprire un file che non trova nella cartella, invece che darmi un errore debug e bloccarsi me lo segnali con un msgbox e me lo renda disponibile per un’altra ricerca

                                              Questo il file rivisto
                                              https://app.box.com/s/o202grl4qf9ml9rjl896vqscpnthx4od

                                            • Avatarrobert pyron
                                              Partecipante
                                                Post totali: 19

                                                Perfetto Sid  …  grazie infinite

                                                Ora funziona perfettamente tutto :good:

                                                • Questa risposta è stata modificata 1 anno, 1 mese fa da Avatarrobert pyron. Motivo: [RISOLTO]
                                            Visualizzazione 20 filoni di risposte
                                            • Devi essere connesso per rispondere a questo topic.