Excel e gli applicativi Microsoft Office Invio foglio attivo ad una email diversa (Excel 2016)

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

    Gret
    Partecipante

      Ciao a tutti  

      spero che possiate aiutarmi col mio problema..

      La macro che ho inserito nell'editor del foglio interessato mi trasforma il foglio attivo in pdf e lo invia all'email che è contenuta nella cella D3 (sempre nello stesso foglio).

      Ora, arrivo al punto, avrei la necessità di inviare il file pdf che ho creato precedentemente ad un altro indirizzo email sempre contenuta nella cella D3 (cambiando indirizzo email).

      Sarebbe possibile fare ciò? (Ad entrambe le macro ho associato un pulsante proprio: la prima macro che mi salva il file pdf e successivamente lo invia, e la seconda che invia una email con testo).

      Vi ringrazio anticipatamente per il vostro aiuto  e spero di aver spiegato bene..

      Di seguito vi posto i codici che uso:

      Sub MailFoglioAttivoInPDF()
      
      Dim OutApp As Object
      Dim OutMail As Object
      Dim v As Variant
      Dim StrMsg As String
      
      
      
      StrMsg = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd' >"
      StrMsg = StrMsg & "<html xmlns='http://www.w3.org/1999/xhtml'>"
      StrMsg = StrMsg & "<body>"
      StrMsg = StrMsg & _
               "

      Buongiorno,</br>
      " & _ "di seguito le allego il documento richiesto.
      " & _ "
      <b>Buona giornata

      </b></br></body></html>" MailDestinatario = Range("D3") v = Application.GetSaveAsFilename(Range("A1").Value & "" & Range("B1").Value & "" & Range("C1").Value & " " & Range("D1").Value, "PDF Files (*.pdf), *.pdf") If VarType(v) <> vbString Then Exit Sub With ActiveSheet .ExportAsFixedFormat Type:=xlTypePDF, Filename:=v, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, From:=1, To:=3, OpenAfterPublish:=False End With Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) On Error Resume Next With OutMail .To = MailDestinatario .Subject = "Documenti" .HTMLBody = StrMsg .Attachments.Add v .Display '.Send End With On Error GoTo 0 Set OutMail = Nothing Set OutApp = Nothing With Application .ScreenUpdating = True .EnableEvents = True End With End Sub ------------------------------------------------------------------ Sub InviaEmail() Dim OutApp As Object Dim OutMail As Object Dim StrMsg As String StrMsg = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd' >" StrMsg = StrMsg & "<html xmlns='http://www.w3.org/1999/xhtml'>" StrMsg = StrMsg & "<body>" StrMsg = StrMsg & _ "

      Ciao, questa è una prova di una e-mail

      </body></html>" Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) MailDestinatario = Range("D3") With OutMail .To = MailDestinatario .Subject = "Invio di prova" .HTMLBody = StrMsg .Display '.Send End With End Sub
      #13086 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        245 pts

        Poiché, come ti accorgi, hai duplicato il codice per inviare la mail, scrivilo una volta soltanto e richiamalo.

        In pratica ti servono due funzioni: una per creare il pdf dal foglio attivo e una per inviare una mail.

        Guardando il codice non ho capito che problema è sorto, mi sembra tutto corretto (a parte che ti consiglio di inserire Option Explicit in testa al modulo).  Ed è anche scritto bene, bravo 🙂 (però devi dichiarare MailDestinatario, che manca)

        Carino l'uso di GetSaveAsFilename, non si vede spesso   

        #13100 Score: 0 | Risposta

        Gret
        Partecipante

          Ciao vecchio frac, ti ringrazio della risposta e scusami se rispondo ora. Sinceramente non ho ben capito cosa vorresti dire. Nel senso che la prima macro va bene e nella seconda devo richiamare la prima? Chiedo perchè alla seconda macro vorrei che in allegato ci fosse il pdf che ho creato prima, in quanto poi il destinatario sarà diverso dal precedente.

          Ti prego di perdonarmi perchè in questi ultimi 3 mesi sto iniziando a masticare il VBA ed alcune cose, soprattutto le più ovvie  non mi vengono.

           

           

          Allegati:
          You must be logged in to view attached files.
          #13102 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            245 pts

            Gret ha scritto:

            Sinceramente non ho ben capito cosa vorresti dire.

            Niente di inafferrabile: ti servono due attività (crea pdf e spedisci mail), quindi devi creare due funzioni. Attualmente hai creato una funzione che le utilizza entrambe, più una separata (l'invio della mail) che fa la stessa cosa della prima, quindi è logico pensare di tenerle separate e richiamarle quando servono. Se poi aggiungi al tuo bagaglio l'informazione che una funzione può ricevere un parametro (in questo caso, il nome del file da allegare), capisci che il risparmio di codice è notevole.

            Quindi lo scheletro dell'algoritmo è questo:

            - funzione CreaPDF():
                  dal foglio attivo crea il PDF;
                  richiama la funzione InviaMail(filePDF).
            
            - funzione InviaMail(parametro opzionale: nome_file_da_allegare):
                  crea gli ogegtti Outlook necessari per l'automazione;
                  prepara il testo della mail;
                  è stato specificato un file_da_allegare?
                  sì ---> allega il file, poi prosegui:
                  no ---> visualizza messaggio (oppure invialo direttamente)

            Tu hai già fatto praticamente tutto, devi solo capire concettualmente (e implementarla) questa cosa del passaggio di parametro 🙂

            #13115 Score: 0 | Risposta

            Gret
            Partecipante

              Ciao vecchio frac e grazie per aver risposto.

              Ho capito cosa vorresti dire (farò delle prove per arrivarci al risultato desiderato) solo che in questo caso, all'apertura del file attivo, il nome con cui salverà il file con l'estensione .pdf cambierà ed ogni volta dovrei cambiare il parametro. (o sbaglio?) Non ci sarebbe un modo per automatizzare il tutto?

              Comunque adesso mi metto a studiare questa cosa e ci sbatterò un po con la mia testa   (so che le due funzioni fanno entrambe la stessa cosa, solo che la prima invia il pdf (come allegato, senza andarlo a cercare) creato all'email predefinita in D3 (con la stessa email nel documento pdf, come tipo fattura), invece la seconda dovrà inviare l'allegato precedente (senza andarlo a cercare) ad un'altra email senza che questa venga trasformata in pdf, quindi mi servono entrambe). Ti ringrazio infinitamente   per l'aiuto, ti farò sapere se riuscirò nell'impresa  

              #13119 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                245 pts

                Gret ha scritto:

                il nome con cui salverà il file con l'estensione .pdf cambierà

                Lo scopo di una funzione con parametro è che puoi invocarla passando il parametro valorizzato diversamente, ogni volta che ti serve. Quindi sì, devi passare un parametro diverso ed è questa l'automazione che ti serve. 

                Gret ha scritto:

                la seconda dovrà inviare l'allegato precedente ad un'altra email senza che venga trasformata in pdf

                Ma l'allegato precedente non è già un pdf?

                #13121 Score: 0 | Risposta

                Gret
                Partecipante

                  Sì, certo è già un pdf.

                  La prima macro va bene così come sta (per l'uso che ne devo fare va benissimo), nella seconda macro dovrei inserire il parametro che richiami la prima macro (che a sua volta richiami il file pdf),  senza che ogni volta che apre outlook devo andare in "c:/documenti ecc.." prendere il file pdf e poi cliccare su invia..   questa sarebbe la mia intenzione..  

                  #13126 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    245 pts

                    Io credo di non essere riuscito a spiegarmi bene. Perciò ho rivisto il tuo ultimo file e ho riscritto il codice perchè faccia quello che mi sembra di aver capito che tu voglia fare.

                    Analizza bene il file allegato e dimmi se così va bene oppure no. A volte un esempio aiuta più delle parole 🙂

                    Chiaramente devi capire come funziona e poi ti sarà chiaro cosa devi modificare.

                    Allegati:
                    You must be logged in to view attached files.
                    #13128 Score: 0 | Risposta

                    Gret
                    Partecipante

                      Grazie mille, praticamente hai semplificato la mia prima macro   adesso cercherò di capire come allegare il pdf alla seconda macro. Ti farò sapere nei prossimi giorni  

                      #13130 Score: 0 | Risposta

                      Luca73
                      Partecipante
                        56 pts

                        Ciao

                        io ti consiglierei, anzichè scrivere un'altra macro, ti creare un ciclo Do ...  loop

                        del tipo qui sotto

                        Sono partito dal file di VF e chiaramente dovrai modificare la definizione del destinatario.

                        Se sai sempre che devi inviarne 2 invece farei un ciclo for ... next

                         Do
                            Set OutMail = OutApp.CreateItem(0)
                            
                            With OutMail
                              .To = destinatario
                              .Subject = oggetto
                              .HTMLBody = StrMsg
                              If allegato <> "" Then .Attachments.Add allegato
                              .Display
                              '.Send
                            End With
                            UnAltro = MsgBox("Ne Vuoi Spedire un Altro?", vbYesNo + vbQuestion, "ALTRO?")
                        Loop Until UnAltro = vbNo
                        
                        

                         

                        #13135 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          245 pts

                          Io mi sono chiesto anche se deve allegare più di un file. In tal caso il codice va aggiustato 🙂

                          #13137 Score: 0 | Risposta

                          Gret
                          Partecipante

                            No no solo un file devo allegare per fortuna ahahahahahahah  

                             

                            
                            
                            #13182 Score: 0 | Risposta

                            Gret
                            Partecipante

                              Eccomi di nuovo ahahah..

                              vecchio frac ho trovato la soluzione al mio problema , ho semplicemente duplicato la parte relativa all'invio dell'email, ho fatto la prova ed la invia ad entrambe.. ti ringrazio tantissimo e ringrazio anche Luca73.. Grazie mille ad entrambi  

                              Vi posto il codice finito se in caso qualcuno ne avesse bisogno:

                              `Sub MailFoglioAttivoInPDF()
                              
                              Dim OutApp As Object
                              Dim OutMail As Object
                              Dim v As Variant
                              Dim StrMsg As String
                              
                              StrMsg = ""
                              StrMsg = StrMsg & ""
                              StrMsg = StrMsg & ""
                              StrMsg = StrMsg & _
                                       "Buongiorno," & _
                                       "di seguito le allego il documento richiesto." & _
                                       "Buona giornata"
                              MailDestinatario = Range("D3")
                              v = Join(Application.Transpose(Application.Transpose(Range("a1:d1"))), "")
                              
                              If VarType(v) <> vbString Then Exit Sub
                              With ActiveSheet
                                      .ExportAsFixedFormat Type:=xlTypePDF, Filename:=v, _
                                      Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                                      IgnorePrintAreas:=False, From:=1, To:=3, OpenAfterPublish:=False
                                  End With
                              
                              Set OutApp = CreateObject("Outlook.Application")
                              Set OutMail = OutApp.CreateItem(0)
                              On Error Resume Next
                                  With OutMail
                                      .To = MailDestinatario
                                      .Subject = "Documenti"
                                      .HTMLBody = StrMsg
                                      .Attachments.Add v
                                      .Display
                                      '.Send
                                      End With
                              
                              MailDestinatario2 = Range("D4")
                              StrMsg = ""
                              StrMsg = StrMsg & ""
                              StrMsg = StrMsg & ""
                              StrMsg = StrMsg & _
                                       "Buongiorno,"
                              
                              Set OutApp = CreateObject("Outlook.Application")
                              Set OutMail = OutApp.CreateItem(0)
                              On Error Resume Next
                              With OutMail
                              .To = MailDestinatario2
                              .Subject = "Documenti"
                              .HTMLBody = StrMsg
                              .Attachments.Add v
                              .Display
                              '.Send
                              End With
                                  On Error GoTo 0
                                  
                                  Set OutMail = Nothing
                                  Set OutApp = Nothing
                              With Application
                                      .ScreenUpdating = True
                                      .EnableEvents = True
                                  End With
                              End Sub
                              `
                              #13189 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                245 pts

                                Gret ha scritto:

                                ho semplicemente duplicato la parte relativa all'invio dell'email

                                Terribile. Proprio quello che non dovevi fare 😛

                                Gret ha scritto:

                                ho trovato la soluzione al mio problema

                                però ce l'hai fatta da solo, e questo giustifica il tuo entusiasmo   

                                #13191 Score: 0 | Risposta

                                Gret
                                Partecipante

                                  ahahahahah grazie, sono molto entusiasta del risultato

                                  p.s. la tua macro la sto ancora studiando per poi modificarla alle mie esigenze

                                Login Registrati
                                Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
                                Rispondi a: Invio foglio attivo ad una email diversa (Excel 2016)
                                Gli allegati sono permessi solo ad utenti REGISTRATI
                                Le tue informazioni: