You are here:--[RISOLTO] aprire Popup
[RISOLTO] aprire Popup2019-06-14T17:04:32+02:00

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

  • Autore
    Articoli
  • 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 argomento è stato modificato 2 mesi fa da sid sid.
    • AvatarKris_9951
      Partecipante
        Post totali: 87

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

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

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

                  Fidati!!

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

                • sidsid
                  Moderatore
                    Post totali: 718

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

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

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

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

                            • sidsid
                              Moderatore
                                Post totali: 718

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

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

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

                                            è 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 2 mesi fa da Avatar robert pyron. Ragione: [RISOLTO]

                                            Devi essere loggato per rispondere a questa discussione.

                                            Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

                                            Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

                                            Chiudi