Invio email con body html da codice vba

Anonimo
2023-09-11T10:29:30+00:00

Salve,

Nell'ufficio dove lavoro, settimanalmente c'è la necessità di creare un foglio Excel dove dobbiamo inserire moltissimi dati e in alcune colonne invece dobbiamo importare dei dati da un altro foglio Excel che ci viene fornito ... tutto questo richiede due ore di tempo ...

Ho pensato quindi di automatizzare mediante codice Visual Basic Application

Abbiamo anche l'esigenza di dover inviare una email con allegato il file Excel creato nel cui corpo dobbiamo inserire una tabella riepilogativa

Ovviamente il codice vba che ho scritto
si occupa anche di creare l'email con il body html in cui inserisce automaticamente la tabella riepilogativa

Il problema è che usando il metodo "send" dell'oggetto "olmail" tutto il corpo dell'email viene inviato correttamente

Invece se utilizzo il metodo display (anteprima di outlook) la tabella riepilogativa perde la formattazione prestabilita

Qualcuno sa darmi qualche dritta per aggirare questo problema?

Ringrazio anticipatamente

Microsoft 365 e Office | Excel | Per il lavoro | Android

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Più recente
  1. Anonimo
    2023-09-14T09:33:57+00:00

    Prima di tutto la ringrazio per la sua tempestiva risposta al mio quesito,

    Dunque, posto di seguito il codice (VBA) di invio email ma credo che sia del tutto inutile in quanto si tratta di una procedura standard ( una sub per intenderci) alla quale passo come parametri l'oggetto dell'email, i destinatari per competenza e conoscenza, il percorso completo del file Excel da allegare, la stringa del body dell'email ecc. ecc. ...

    Public Sub SendEMail(ByVal strHTMLMailBody As String, ByVal strEMailAddressees As String, ByVal strEMailAttachment As String, bla bla bla ... )

    Dim objOutlookApp As Object 
    
    Dim objMail As Object 
    
    Set objOutlookApp = CreateObject("Outlook.Application") 
    
    Set objMail = objOutlookApp.CreateItem(olMailItem) 
    
    With objMail    
    
        .To = strEMailAddressees 
    
        .Subject = "Test invio email" 
    
        .Attachments.Add (strEMailAttachment) 
    
        .BodyFormat = olFormatHTML 
    
        .HTMLBody = strHTMLMailBody 
    
        ...
    
        bla .. bla ..bla ... bla ...
    
        ...
    
        .Display 
    
        ' .Send 
    
    End With 
    

    End Sub

    Infatti il mio problema non è l'invio dell'email che viene inviata correttamente ma è la formattazione della tabella riepilogativa nel body dell'email che Outlook altera se utilizzo il metodo display, per esempio l'head della tabella perde il colore dello sfondo impostato (background-color) gli attributi dei bordi non sono quelli che ho impostato ecc. ecc.

    Il body dell'email non è altro che il testo del codice HTML , questo contiene delle variabili di riferimento che per il codice HTML non sono null'altro che testo e che in breve vado a rimpiazzare tramite la funzione Replace di VBA con i valori da includere nella tabella riepilogativa; la sostituzione la eseguo fuori dalla Sub SendEMail(), a questa gli passo come parametro il testo html completo di tutti i valori ...

    Il testo HTM del body dell'email è memorizzato in una cella Excel

    Se dunque nella Sub SendEMail() uso direttamente il metodo .send e non uso il metodo .display la tabella riepilogativa nel body viene inviata correttamente se invece utilizzo il metodo display (quindi l'invio dovrà essere comandato manualmente nell'anteprima dell'email) la tabella riepilogativa subisce un'alterazione,

    Che la causa sia outlook ((della suite Microsoft Office 2021 Professional plus) è evidente ...

    Purtroppo in ufficio utilizziamo outlook per le emails e comunque l'anteprima dell'email è necessaria perché di volta in volta capita di dover aggiungere nel body dell'email qualche breve nota del caso

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-09-11T11:03:45+00:00

    Ciao Federico,

    Nell'ufficio dove lavoro, settimanalmente c'è la necessità di creare un foglio Excel dove dobbiamo inserire moltissimi dati e in alcune colonne invece dobbiamo importare dei dati da un altro foglio Excel che ci viene fornito ... tutto questo richiede due ore di tempo ...

    Ho pensato quindi di automatizzare mediante codice Visual Basic Application

    Abbiamo anche l'esigenza di dover inviare una email con allegato il file Excel creato nel cui corpo dobbiamo inserire una tabella riepilogativa

    Ovviamente il codice vba che ho scritto
    si occupa anche di creare l'email con il body html in cui inserisce automaticamente la tabella riepilogativa

    Il problema è che usando il metodo "send" dell'oggetto "olmail" tutto il corpo dell'email viene inviato correttamente

    Invece se utilizzo il metodo display (anteprima di outlook) la tabella riepilogativa perde la formattazione prestabilita

    Qualcuno sa darmi qualche dritta per aggirare questo problema?

    Ringrazio anticipatamente

    Avremmo bisogno di vedere il tuo codice e un semplice file di esempio, privo di dati sensibili,

    A questo proposito, ho spesso utilizzato codice per scopi simili e non ho riscontrato il tuo problema.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento