2017-03-20 8 views
1

J'utilise Excel pour envoyer des e-mails en utilisant du texte dans une zone de texte en tant que corps. Cela fonctionne bien, sauf que lors de l'envoi d'un courrier, il copie uniquement la taille de la police du texte, mais pas sa couleur ou son style. J'ai fait beaucoup de recherches, mais je n'ai trouvé aucune solution. Existe-t-il un code permettant à Excel de copier le style du texte dans une zone de texte ainsi que son contenu? Voici le code de l'envoi du courrier:VBA: Modifier le style de texte lors de l'envoi d'un e-mail

Sub SendMail() 
Dim OutApp As Outlook.Application 
Dim OutMail As Outlook.MailItem 
Dim strbody As String 

Set OutApp = CreateObject("Outlook.Application") 
Set OutMail = OutApp.CreateItem(olMailItem) 

strbody = ThisWorkbook.Sheets("Mail").Shapes("txt").DrawingObject.Text 
'I named the textbox "txt" in the worksheet 
'On Error Resume Next 
With OutMail 
    .To = "[email protected]" 
    .CC = "" 
    .BCC = "" 
    .Subject = Cells(3, 2) 
    .Body = strbody 

    .Send 
End With 

Set OutMail = Nothing 
Set OutApp = Nothing 
End Sub 

Je sais que cela est possible en HTML comme:
strbody = "<BODY style=font-size:11pt;font-family:Calibri>Good Morning;<p>We have completed our main aliasing process for today. All assigned firms are complete. Please feel free to respond with any questions.<p>Thank you.</BODY>"
Mais depuis que j'écris le corps dans une zone de texte au lieu de dans le code, je préfèrent trouver une solution.

Merci d'avance.

Répondre

2

PasteExcelTable est probablement ce que vous cherchez, mais il est un peu plus caché dans le sens qu'Outlook utilise un éditeur de document Word. Vous devez ajouter la référence de l'objet Word.

Vous devrez modifier le reste de votre code pour l'insérer en utilisant l'auteur au lieu de .HTMLbody ou .body.

Notez également que pour l'inspecteur/écrire au travail il semble que vous ne pouvez pas cacher la fenêtre, mais je n'ai pas entièrement testé cela.

Sub SendEmail() 
    Dim OutApp As Outlook.Application 
    Dim OutMail As Outlook.MailItem 
    Dim strbody As String 

    Dim olInsp As Outlook.Inspector 
    Dim document As Word.document 
    Dim oRng As Excel.Range 

    Set OutApp = New Outlook.Application 
    Set OutMail = OutApp.CreateItem(olMailItem) 

    With OutMail 
     .To = "[email protected]" 
     .CC = "" 
     .BCC = "" 
     .Subject = Cells(3, 2) 
     .Display 
     Set olInsp = .GetInspector 

     If olInsp.IsWordMail And olInsp.EditorType = olEditorWord Then 
      Set document = olInsp.WordEditor 
      Set oRng = Range("A1:B2") ' The range you wish to copy into the document 
      oRng.Copy ' Loads info to clipboard 
      ' Write the range into the first paragragh of the word document. 
      document.Paragraphs(1).Range.PasteExcelTable False, False, True 

      ' Example how to write to the end of the email. 
      Dim p As Word.Paragraph 
      Set p = document.Paragraphs.Add 
      p.Range.Text = "test" 
     End If 

    End With 

    Set OutMail = Nothing 
    Set OutApp = Nothing 

End Sub 
+0

Belle façon alternative. Certainement plus facile qu'en utilisant une zone de texte et en essayant de le convertir en HTML. J'aime cette suggestion. –

+0

Merci Cody G. J'ai commencé à utiliser une autre méthode que je publierai si je réussis. Je vais tester le vôtre juste après. – Francis

1

Tout d'abord, je ne connais pas de méthode par défaut/intégrée dans Excel pour ce faire. Ce dont vous avez besoin est un format de cellule Excel au convertisseur HTML.

Vous ne pouvez construire que par vous-même ou trouver un script approprié en ligne; semblable à celui-ci: Macro to Convert Excel Cell to HTML and preserve font formatting.

+0

Merci. J'ai regardé dedans. J'ai mis "test" dans une cellule et l'ai sélectionné avant d'exécuter la macro. Mais bizarrement, rien n'est arrivé. – Francis

+0

Ce n'était pas un "copier-coller ce code" mais plutôt une suggestion de comment cela pourrait être fait. Il n'y a pas de solution prête à l'emploi. –

+0

Alors que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'examen] (/ review/low-quality-posts/15582189) – Tom