Email tramite vb



  • Email tramite vb
    di loriss84 data: 15/10/2014 13:35:39

    Ciao a tutti! Vi vorrei chiedere una vba , gentilmente, per questo mio problema.
    Ogni giorno devo inviare a un utente (contenuto nella cella xx25 in quanto questa cella è un risultato di una formula e quindi varia di volta in volta) una mail con un testo standard e un allegato ( che dovrà essere selezionato tramite risorse dal computer, chiedo questo perchè ogni volta il file cambierà nome).
    Vi chiedo se gentilmene mi potete elencare una vba al mio caso perfavore.
    E' da giorni che spulcio questo forum senza ricavarne un ragno dal buco.

    Grazie
    Loris



  • di loriss84 (utente non iscritto) data: 15/10/2014 14:20:44

    Dimenticavo questa è la vba che ho già creato nella quale vorrei implementare la selezione del file
     
    Public Sub InviaMail_Predefinita()
    
        Dim OutApp As Object
        Dim OutMail As Object
        
        Dim destinatario As String
        
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        
        With OutMail
        
            .To = Range("D23")        'inserire la mail del destinatario in TO
            .CC = Range("E17")   'inserire la mail del destinatario in CC
            .Subject = Range("D27")
            .Body = "Buongiorno, con la presente siamo a segnalare l'avvenuta rettifica della bolla in oggetto per il seguente motivo" & _
                    Chr(10) & _
                    Chr(10) & Range("D31") & _
                    Chr(10) & _
                    Chr(10) & "Loris " & _
                    Chr(10) & "CO.CLI"
            
                  .Display                           'per aprire e controllare la mail prima di inviarla manualmente
    
        End With
        
        
        Set OutMail = Nothing
        Set OutApp = Nothing
    
     End Sub



  • di Luca73 data: 15/10/2014 15:06:29

    Ciao
    io lo farei in un modi tipo qui sotto
    (vedi help per il GetOpenFilename) al momento è impostato per un file di testo )*.txt

    Ciao
    Luca
     
    Public Sub InviaMail_Predefinita()
     [...]
        With OutMail
         [...]    
            .Attachments.Add Application.GetOpenFilename("Text Files (*.txt), *.txt")
          
            .Display                           'per aprire e controllare la mail prima di inviarla manualmente
    
        End With
        [...]
    
     End Sub
    






  • di loriss84 (utente non iscritto) data: 15/10/2014 15:12:21

    GRazie mille! tu sei un genio!
    quando ho fatto play sulla vba e ha funzionato mi sono alzato esultando in mezzo all'ufficio ah ah



  • di loriss84 (utente non iscritto) data: 15/10/2014 15:33:56

    però ora per concludere ho altre due domande poi vi ringrazierò per sempre:)
    la prima è . con questa impostazione posso inserire solamente un file per volta. Se volessi inserire N file (cioè una volta 2 file una volta 3 ecc di diverso tipo . o file excel e o pdf) come faccio?
    Ultima, come posso inserire 2 destinatari, 2 in copia conoscenza??


  • Attachment Multiplo
    di Luca73 data: 15/10/2014 16:05:13

    Ciao
    Cominciamo con il primo quesito.
    Per inserire più file alla volta hai due possibilità. La prima è molto utile se hai tutti i file nella stessa directory. Inquesto caso io userei il parametro multiselect di GetOpenFilename (poi usi il tasto ctrl per selezionare i file che ti servono) e il codice lo modificherei come in Esempio 1 (vedi Sotto)
    Se invece i file fossero in directory diverse io farei un ciclo do... loop con una richiasta se servono altri File e il Codice si modifica come in Esempio 2 (ti scrivo solo le modifiche molto semplificate lasciando a te gli abbellimenti (ad esempio per il msgboxma se hai bisogno chiedi).

    Ciao Luca
     
    ESEMPIO 1
    Public Sub InviaMail_Predefinita()
    [...]
        Dim myAttachments()
        Dim Index
        [...]
        With OutMail
        [...]        
            myAttachments() = Application.GetOpenFilename("Text Files (*.txt), *.txt", , , , True)
            For Index = 1 To UBound(myAttachments)
                    .Attachments.Add myAttachments(Index)
            Next Index
                  .Display                       'per aprire e controllare la mail prima di inviarla manualmente
        End With
    [...]
     End Sub
    
    ESEMPIO 2
    
    Public Sub InviaMail_Predefinita()
    [...]
        Dim myAttachments()
        Dim Index
        Dim Mex
    [...]
        With OutMail
    [...]    
            Do
                myAttachments() = Application.GetOpenFilename("Text Files (*.txt), *.txt", , , , True)
                For Index = 1 To UBound(myAttachments)
                    .Attachments.Add myAttachments(Index)
                Next Index
                Mex = MsgBox("Devi Selezionare Altri File?", vbYesNo)
            Loop Until Mex = vbNo
            .Display
        End With
     [...]
     End Sub
    
    





  • Indirizzi Multipli
    di Luca73 data: 15/10/2014 16:20:12

    Ciao per gli indirizzi multipli io mi ero generato due varabili "indirizziTO" e "indirizziCC" che poi avevo riempito con istruzioni del tipo messe all'interno di due loop
    indirizziTO = indirizziTO & Indirizzo(i) & ";"
    indirizziCC = indirizziTO & Indirizzo(i) & ";"
    dove Indirizzo(i) possono essere celle diverse o altro.
    poi alla fine avevo usato l'istruzione sotto riportata.

    Questo nel caso avessi gli indirizzi in più celle altrimenti potressti gia nella cella Range("D23") e Range("E17") mettere in fila separati da ; tutti gli indirizzi.

    Ciao
    Fammi sapere se funziona ed è tutto chiaro
    Luca

    PS io di solito scriverei
    .To = Range("D23").Text
    e non solo
    .To = Range("D23")

     
     .To = indirizziTO
     .CC = IndirizziCC
    For Each indir In .Recipients
            indir.Resolve
    Next
    






  • di lorisss84 (utente non iscritto) data: 16/10/2014 12:27:44

    Luca grazie mille! hai quasi risolto tutti i miei dubbi!
    Sai che però non ho capito come mandare a destinatari multipli il tutto?

    ti spiego ulteriormente il mio problema.
    Devo mandare a 3 destintari in .to e 3 destinatari in .cc
    Questi 6 destinatari sono in 6 celle diverse (derivati da formule e quindi se non presenti excel mi da come risultato 0).
    Come si può fare sopratutto per non far uscire nella mail il destinatario 0???



  • di Luca73 data: 16/10/2014 13:06:13

    Assumendo Che le celle Siano D23, D24 e D25 per To e E17, E18, E19 per CC Il Programma lo scriverei come sotto.
    Altrimenti metteret un If nella formula che ti genera l'indirizzo in modo che, in assenza di indirizzo scriva "" ovvero nulla.

    Ciao
    Luca
     
     With OutMail
    [...]
            .To=""
        If Range("D23").Text<>0 then
            .To = Range("D23")  & ";"      'inserire la mail del destinatario in TO
        End If
        If Range("D24").Text<>0 then
            .To =.To &  Range("D24").Text  & ";"
        End If
        If Range("D25").Text<>0 then
            .To = .To & Range("D25").text        'inserire la mail del destinatario in TO
        End If
            . CC=""
        If Range("E17").text=0 then
            .CC = Range("E17") & ";"  'inserire la mail del destinatario in CC
        End If
        If Range("E18").text=0 then
            .CC = .CC & Range("E18") & ";"  'inserire la mail del destinatario in CC
        End If
        If Range("E17").text=0 then
            .CC = .CC & Range("E18") & ";"  'inserire la mail del destinatario in CC
        End If
    [...]
    End With






  • di lorisss84 (utente non iscritto) data: 16/10/2014 15:01:17

    Caspita ci siamo quasi.
    Con la tua vba non mette più gli zeri però non separa i destinatari con il "; " e cosi non riesco a mandare la mail...



  • di Luca73 data: 16/10/2014 15:17:50

    Così a me funziona
    Ciao
    Luca

     
    Public Sub InviaMail_Predefinita()
    [...]    Dim IndirizzoTO
        Dim IndirizzoCC
        Dim destinatario As String
        Dim indir
    [...]
        With OutMail
               .to = ""
               IndirizzoTO = ""
               If Range("D23").Text <> 0 Then
                    IndirizzoTO = Range("D23").Text & "; "       'inserire la mail del destinatario in TO
               End If
               If Range("D24").Text <> 0 Then
                    IndirizzoTO = IndirizzoTO & Range("D24").Text & "; "
               End If
               If Range("D25").Text <> 0 Then
                   IndirizzoTO = IndirizzoTO & Range("D25").Text        'inserire la mail del destinatario in TO
               End If
               .to = IndirizzoTO
               .CC = ""
              IndirizzoCC = ""
              If Range("E17").Text <> 0 Then
                   IndirizzoCC = Range("E17").Text & ";"  'inserire la mail del destinatario in CC
              End If
              If Range("E18").Text <> 0 Then
                   IndirizzoCC = IndirizzoCC & Range("E18").Text & ";"  'inserire la mail del destinatario in CC
              End If
              If Range("E17").Text <> 0 Then
                   IndirizzoCC = IndirizzoCC & Range("E19").Text & ";"  'inserire la mail del destinatario in CC
              End If
              .CC = IndirizzoCC
              For Each indir In .Recipients
                   indir.Resolve
              Next
    [...]
             .Display                           'per aprire e controllare la mail prima di inviarla manualmente
    [...]
    End With
    [...]
    End Sub






  • di lorisss84 (utente non iscritto) data: 16/10/2014 15:26:53

    Ci siamo quasi Luca! ora non so cosa ho toccato ma non mi compare più il CC
    mi escono solamente i destinatari...
    cosa ha rotto nella VBA?
     
    Public Sub InviaMail_Predefinita2()
    
        Dim OutApp As Object
        Dim OutMail As Object
        Dim myAttachments()
        Dim Index
        
        Dim IndirizzoTo
        Dim IndirizzoCC
        Dim destinatario As String
        Dim indir
        
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        
        With OutMail
        .To = ""
               IndirizzoTo = ""
               If Range("D7").Text <> 0 Then
                    IndirizzoTo = Range("D7").Text & "; "       'inserire la mail del destinatario in TO
               End If
               If Range("D9").Text <> 0 Then
                    IndirizzoTo = IndirizzoTo & Range("D9").Text & "; "
               End If
               If Range("D11").Text <> 0 Then
                   IndirizzoTo = IndirizzoTo & Range("D11").Text        'inserire la mail del destinatario in TO
               End If
               .To = IndirizzoTo
               .CC = ""
              IndirizzoCC = ""
              If Range("d13").Text <> 0 Then
                   IndirizzoCC = Range("d13").Text & ";"  'inserire la mail del destinatario in CC
              End If
              If Range("D15").Text <> 0 Then
                   IndirizzoCC = IndirizzoCC & Range("D15").Text & ";"  'inserire la mail del destinatario in CC
              End If
              If Range("D17").Text <> 0 Then
                   IndirizzoCC = IndirizzoCC & Range("D17").Text & ";"  'inserire la mail del destinatario in CC
              End If
              .CC = IndirizzoCC
              For Each indir In .Recipients
                   indir.Resolve
              Next
    
            
            .CC = Range("C27").Text   'inserire la mail del destinatario in CC
            .Subject = Range("D45")
            .Body = "Dear all," & _
                    Chr(10) & _
    Chr(10) & "We are sending you here attached :" & _
                    Chr(10) & "Copy of invoices" & _
                    Chr(10) & "Invoices detail" & _
                    Chr(10) & Range("c43") & _
                    Chr(10) & _
                    Chr(10) & "The original will follow by post" & _
                    Chr(10) & "For any information please contact us." & _
                    Chr(10) & _
                    Chr(10) & _
                    Chr(10) & "Loris Sambinelli" & _
                    Chr(10) & "CO.CLI"
                    With OutMail
           
            myAttachments() = Application.GetOpenFilename("Text Files (*.pdf), *.pdf", , , , True)
            For Index = 1 To UBound(myAttachments)
                    .Attachments.Add myAttachments(Index)
            Next Index
                  .Display                       'per aprire
            .Display                           'per aprire e controllare la mail prima di inviarla manualmente
    
        End With
    
            
                  .Display                           'per aprire e controllare la mail prima di inviarla manualmente
    
        End With
        
        
        Set OutMail = Nothing
        Set OutApp = Nothing
    
     End Sub
    



  • di Luca73 data: 16/10/2014 15:47:17

    Hai lasciato una riga di troppo cancella la riga

     
    .CC = Range("C27").Text   'inserire la mail del destinatario in CC






  • di Luca73 data: 16/10/2014 15:49:47

    Attenzione verso la fine ci sono un po' di imprecisioni:
    ci sono due end with e tre . display

    Sistema tutto...





  • di lorisss84 (utente non iscritto) data: 16/10/2014 16:26:51

    Grandissimo Luca!!!!! Fatto tutto!!! Ora funziona perfettamente!
    Per me si può chiudere!
    GRazie a tutti



  • di lepat (utente non iscritto) data: 16/10/2014 17:22:05

    prima di chiudere saresti così gentile di allegare un file di esempio funzionante ? potrebbe essere utile ad altri



  • di lorisss84 (utente non iscritto) data: 16/10/2014 19:07:59

    CErtamente! domani torno in ufficio tolgo tutti i dati sensibili e allegherò il file!!
    grazie ancora!