2015-03-05 2 views
3

у меня есть лист с заданными данными,VBA- Форматирование электронной почты для тела с содержанием первенствовать

enter image description here

Мне нужно отправить данные, используя внешний вид Micorosft в требуемом формате для определенной даты (Say, если дата это 5 января 2015) .Refer ниже

enter image description here

Это как электронная почта должна выглядеть,

enter image description here

Я разработчик-любитель в форматировании электронной почты через VBA. Код написан в модулях книги Excel 2007 и здесь,

Public Function FormatEmail(Sourceworksheet As Worksheet, Recipients As Range, CoBDate As Date) 

Dim OutApp As Object 
Dim OutMail As Object 
Dim rows As Range 

    On Error GoTo FormatEmail_Error 

    Application.ScreenUpdating = False 
    Set OutApp = CreateObject("Outlook.Application") 

For Each rows In Recipients.Cells.SpecialCells(xlCellTypeConstants) 

    If rows.value Like "?*@?*.?*" Then 
    Set OutMail = OutApp.CreateItem(0) 

    On Error Resume Next 
     With OutMail 
       .To = rows.value 
       .Subject = "Reminder" 
       .Body = "Hi All, " & vbNewLine & _ 
         vbNewLine 
       .display 

     End With 

    On Error GoTo 0 

    Set OutMail = Nothing 


    End If 

Next rows 

    On Error GoTo 0 
    Exit Function 

FormatEmail_Error: 

    Set OutApp = Nothing 
    Application.ScreenUpdating = True 
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure FormatEmail of Module modOutlook" 

End Function 

Stackoverflow имеет бассейн experts.Kindly помощь и то с благодарностью. Заранее спасибо.

С уважением,

Mani

ответ

4

Если вы хотите создать хорошо отформатированные сообщения электронной почты Outlook, то вам необходимо генерировать сообщения с форматированием. Чистых текстовых сообщений явно недостаточно, и поэтому вы должны искать электронные письма в формате HTML. Если это так, вы, вероятно, стремитесь динамически создавать HTML-код с VBA, чтобы имитировать приятное визуальное представление Excel.

Под следующей ссылкой http://www.quackit.com/html/online-html-editor/ вы найдете онлайн-редактор HTML, который позволяет вам подготовить красиво отформатированный адрес электронной почты, а затем отобразит HTML-код, необходимый для получения этого форматирования. После этого вам просто нужно установить в VBA тело электронной почты на этот HTML-код с помощью

.HTMLBody = "your HTML code here" 

вместо

.Body = "pure text email without formatting" 

Если этого не достаточно, и вы хотите скопировать/вставить части вашего Excel в то, электронной почты, то вам придется копировать части вашего Excel, сохранять их как изображение, а затем добавлять изображение на свой адрес электронной почты (еще раз используя HTML). Если это то, что вы хотите, то вы найдете решение здесь: Using VBA Code how to export excel worksheets as image in Excel 2003?

+0

Это верно и частичное. Я предоставил полный код. Этот сайт действительно помогает http://www.rondebruin.nl/win/s1/outlook/mail.htm –

0

Вот ответ для этого служит цели. Тело html построено с использованием концепции строкового построителя, и по мере необходимости формируется электронное письмо (изменено подпись электронной почты из сообщения). Это работает нормально.

Public Function FormatEmail(Sourceworksheet As Worksheet, CoBDate As Date, FinalRatioLCR As Variant, FinalRatioAUD As Variant) 

Dim OutApp As Object 
Dim OutMail As Object 
Dim eMsg As String 

Dim ToRecipients As String 

    On Error GoTo FormatEmail_Error 

    Application.ScreenUpdating = False 
    Set OutApp = CreateObject("Outlook.Application") 

Dim Matrix2_1, Matrix2_2, Matrix2_3, Matrix3_1 As String 
Dim FinanceAllCurrency, AllCurrencyT1, AllCurrencyT0, AllCurrencyAUD As Double 

'FinanceAllCurrency = FinalRatioLCR 
AllCurrencyT1 = 10.12 
AllCurrencyT0 = 20.154 
'AllCurrencyAUD = FinalRatioAUD 
Matrix2_1 = "<td>" & FinalRatioLCR & "</td>" 
Matrix2_2 = "<td>" & AllCurrencyT1 & "</td>" 
Matrix2_3 = "<td>" & AllCurrencyT0 & "</td>" 
Matrix3_1 = "<td>" & FinalRatioAUD & "</td>" 

eMsg = "<head><style>table, th, td {border: 1px solid black; border-collapse:" & _ 
     "collapse;}</style></head><body>" & _ 
     "<table style=""width:50%""><tr>" & _ 
     "<th bgcolor=""#D8D8D8"">LCR</th><th bgcolor=""#D8D8D8"">Finance</th>" & _ 
     "<th bgcolor=""#D8D8D8"">Desk T+1</th><th bgcolor=""#D8D8D8"">Desk T+0</th></tr><tr>" & _ 
     "<td>All Currency</td>" & Matrix2_1 & Matrix2_2 & _ 
     Matrix2_3 & _ 
     "</tr><tr><td>AUD Only</td>" & Matrix3_1 & "<td>-</td>" & _ 
     "<td> &nbsp; &nbsp; - &nbsp;</td></tr></Table></body>" 


ToRecipients = GetToRecipients 

    Set OutMail = OutApp.CreateItem(0) 


     With OutMail 
       .To = ToRecipients 
       .Subject = " Report -" & CoBDate 
       .HTMLBody = "Hi All, " & "<br></br><br></br><br></br><br></br>" & _ 
          eMsg 
       .display 

     End With 

    On Error GoTo 0 

    Set OutMail = Nothing 

    On Error GoTo 0 
    Exit Function 

FormatEmail_Error: 

    Set OutApp = Nothing 
    Application.ScreenUpdating = True 
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure FormatEmail of Module modOutlook" 

End Function 

Получатели адрес динамически извлекается из диапазона.

Private Function GetToRecipients() As String 
Dim rngRows As Range 
Dim returnName As String 

For Each rngRows In shMapping.Range(MAPPING_EMAIL_RECIPIENTS).rows 

If Len(returnName) = 0 Then 
    returnName = rngRows.Cells(, 2).value2 
ElseIf Len(rngRows.Cells(, 2).value2) > 0 Or rngRows.Cells(, 2).value2 Like "?*@?*.?*" Then 
    returnName = returnName & ";" & rngRows.Cells(, 2).value2 
End If 

Next 
GetToRecipients = returnName 
End Function 
Смежные вопросы