Mail



  • Mail
    di Giuseppe (utente non iscritto) data: 08/09/2016 09:42:39

    Buongiorno. Ho la necessità di inviare per mail (Outlook 2010) come allegato di posta elettronica uno dei fogli che costituiscono un file di Excel. Di seguito la macro che ho trovato in rete; funziona, però vorrei apportare alcune modifiche, ma non so proprio come fare. Vorrei in primo luogo che il foglio fosse inviato in formato pdf; in secondo luogo vorrei che il nome del foglio inviato fosse preso dalla cella C4 del foglio stesso; infine, che il foglio fosse inviato all'indirizzo di posta elettronica riportato nella cella C8. Ove possibile, vorrei poi che nel capo "Oggetto" della mail fosse riportata una frase standard (es. Invio documentazione), e che nel corpo della mail fosse riportata un'altra frase standard (es. Si invia quanto in oggetto). Grazie.

     
    Sub mail()
    
    'Working in 97-2010
        Dim FileExtStr As String
        Dim FileFormatNum As Long
        Dim Sourcewb As Workbook
        Dim Destwb As Workbook
        Dim TempFilePath As String
        Dim TempFileName As String
        Dim I As Long
    
        With Application
            .ScreenUpdating = False
            .EnableEvents = False
        End With
    
        Set Sourcewb = ActiveWorkbook
    
        'Copy the sheet to a new workbook
        ActiveSheet.Copy
        Set Destwb = ActiveWorkbook
    
        'Determine the Excel version and file extension/format
        With Destwb
            If Val(Application.Version) < 12 Then
                'You use Excel 97-2003
                FileExtStr = ".xls": FileFormatNum = -4143
            Else
                'You use Excel 2007-2010, we exit the sub when your answer is
                'NO in the security dialog that you only see  when you copy
                'an sheet from a xlsm file with macro's disabled.
                If Sourcewb.Name = .Name Then
                    With Application
                        .ScreenUpdating = True
                        .EnableEvents = True
                    End With
                    MsgBox "Your answer is NO in the security dialog"
                    Exit Sub
                Else
                    Select Case Sourcewb.FileFormat
                    Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                    Case 52:
                        If .HasVBProject Then
                            FileExtStr = ".xlsm": FileFormatNum = 52
                        Else
                            FileExtStr = ".xlsx": FileFormatNum = 51
                        End If
                    Case 56: FileExtStr = ".xls": FileFormatNum = 56
                    Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                    End Select
                End If
            End If
        End With
    
        '    'Change all cells in the worksheet to values if you want
        '    With Destwb.Sheets(1).UsedRange
        '        .Cells.Copy
        '        .Cells.PasteSpecial xlPasteValues
        '        .Cells(1).Select
        '    End With
        '    Application.CutCopyMode = False
    
        'Save the new workbook/Mail it/Delete it
        TempFilePath = Environ$("temp") & ""
        TempFileName = "Part of " & Sourcewb.Name & " " _
                     & Format(Now, "dd-mmm-yy h-mm-ss")
    
        With Destwb
            .SaveAs TempFilePath & TempFileName & FileExtStr, _
                    FileFormat:=FileFormatNum
            On Error Resume Next
            For I = 1 To 3
                .SendMail "", _
                          ""
                If Err.Number = 0 Then Exit For
            Next I
            On Error GoTo 0
            .Close SaveChanges:=False
        End With
    
        'Delete the file you have send
        Kill TempFilePath & TempFileName & FileExtStr
    
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
        End With
    End Sub



  • di patel data: 08/09/2016 12:15:32

    allega un file di esempio da testare.
    usi gmail ? ti andrebbe bene inviare senza passare per outlook ?





  • di Luca73 data: 08/09/2016 12:15:56

    Gentilmente manda un tipico file di esempio.
    Ciao
    Luca





  • di Giuseppe (utente non iscritto) data: 08/09/2016 12:52:38

    Allego il file ESEMPIO. Per l'invio della posta devo necessariamente utilizzare Outlook.



  • di patel data: 08/09/2016 19:00:54

    L'indirizzo del destinatario lo metti manualmente ? perché non puoi fare a meno di outllook ?
    prova con questa soluzione www.mrexcel.com/forum/excel-questions/69282-send-mail-visual-basic-applications.html





  • di Giuseppe (utente non iscritto) data: 08/09/2016 19:58:21

    L'indirizzo di posta elettronica lo inserisco manualmente in una casella del foglio Excel; e comunque è lo stesso sempre, perchè tutti gli inviii sono fatti allo stesso indirizzo mail. Devo usare per forza Outlook perchè è il solo programma mail autorizzato in ufficio. Girando in rete ho trovato una soluzione abbastanza soddisfacente: una macro che salva il foglio Excel sul desktop in pdf, prendendo il nome del file dalla casella C2 del foglio Excel medesimo. A questo punto ho due possibilità: la prima, fare un'unica mail inserendo a mano il destinatario, e allegando tutti i fogli così salvati, o comunque una selezione di essi. La seconda, che la macro che salva i pdf dei singoli file li invii anche per mail al destinatario il cui indirizzo mail è nella cella C4 di ogni foglio. Se non è possibile la seconda soluzione opterò per la prima, magari perfezionando un poco la macro (vorrei infatti salvare i file pdf in una specifica cartella del desktop).



  • di patel data: 08/09/2016 20:47:35

    la soluzione che ti vorrei proporre io non utilizza programmi di posta, invia direttamente ed è quella descritta qui
    www.excelvba.it/Forum/thread.php?f=1&t=11015





  • di Luca73 data: 09/09/2016 09:54:42

    Ciao Giuseppe
    guarda il codice qui sotto l'ho ottenuto modificando alcuni miei progetti precedenti.
    dovrebbe fare quello che vuoi tu
    in pratica:
    - Salva il foglio sintesi come pdf
    - prepara una mail con l'indirizzo in B6
    - aggiunge un testo come oggetto
    - aggiunge un testo generico
    - allega il file appena creato.

    Fammi sapere se è qullo che cercavi.
    Visto che mastichi un po' di VBA non ti sarà difficile modificarla.

    Fammi sapere
    Ciao
    Luca


     
    Option Explicit
    Sub Luca01()
    Dim AppMail As Object 'Outlook.Application
    Dim NewMail As Object 'Outlook.Application
    Dim miaDir
    Dim MioWBK As Workbook
    Dim MioSheet As Worksheet
    Dim Nome As String
    Dim Cognome As String
    Dim indirizziTO As String
    Dim IndirizziCC As String
    Dim NomeFile As String
    Dim Oggetto As String
    Dim Testo As String
    
    Set MioWBK = ActiveWorkbook
    Set MioSheet = ActiveWorkbook.Sheets("SINTESI")
    miaDir = MioWBK.Path
    Nome = MioSheet.Range("B3")
    Cognome = MioSheet.Range("B4")
    NomeFile = "SINTESI_" & Nome & "_" & Cognome & ".pdf"
    
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            miaDir & "/" & NomeFile, Quality:= _
            xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
            OpenAfterPublish:=False
    
    On Error Resume Next
    Set AppMail = GetObject(, "Outlook.Application")
    If Err.Number <> 0 Then
        Err.Clear
        Set AppMail = CreateObject("Outlook.Application")
        AppMail.Session.Logon
    
        If Err <> 0 Then
            MsgBox "Could not load Outlook", vbOKOnly + vbInformation, "Error report"
            End
        End If
    End If
    indirizziTO = MioSheet.Range("B6")
    IndirizziCC = ""
    Set NewMail = AppMail.CreateItem(0)
    
    Oggetto = "Invio Documentazione"
    Testo = "Egregio Signor " & Cognome & " " & Nome & vbCrLf
    Testo = Testo & "Le Invio la documentazione allegata:" & vbCrLf
    Testo = Testo & " - " & NomeFile & vbCrLf & vbCrLf
    Testo = Testo & "Cordiali Saluti" & vbCrLf
    
    With NewMail
        .To = indirizziTO
        .CC = IndirizziCC
        .Subject = Oggetto
        .body = Testo & .body
        .Attachments.Add miaDir & "/" & NomeFile
        .Display
    End With
    
    'NewMail.SEND
    End Sub
    






  • di Giuseppe (utente non iscritto) data: 09/09/2016 11:42:19

    Grazie Luca73, funziona alla perfezione!!!
    Volevo solo un chiarimento da te: ho visto che la macro salva il pdf sul desktop; è possibile farlo salvare in una specifica cartella posta sul desktop? Se si, è possibile che il percorso per il salvataggio sia inserito in una cella del foglio medesimo (ad esempio, nella cella D3)?? (per intenderci, tipo C:usersdesktopInviati). Grazie




  • di patel data: 09/09/2016 12:49:27

    sostituisci la riga
    miaDir = MioWBK.Path
    con
    miaDir = Range("D3")





  • di Giuseppe (utente non iscritto) data: 09/09/2016 14:08:23

    Grazie Patel, funziona alla perfezione.