使用VBA在电子邮件中插入文本正文和excel表格正文

使用VBA在电子邮件中插入文本正文和excel表格正文,vba,excel,email,outlook,Vba,Excel,Email,Outlook,我正在尝试创建一个用于商业用途的电子邮件模板,该模板可以使用VBA发送,因为最终目标是用户只能通过userform填写空格,因此文本保持不变。我已经有了userform,并且以这样一种方式编码,即在文本部分中填充适当的空格,并将其包含在电子邮件正文中,但是我还没有弄清楚如何包含该表 以下是我迄今为止尝试添加表的内容: Sub SendEmailwhat_address作为字符串,subject_行作为字符串,mail_body作为字符串,claim_info作为范围 Dim olApp作为Out

我正在尝试创建一个用于商业用途的电子邮件模板,该模板可以使用VBA发送,因为最终目标是用户只能通过userform填写空格,因此文本保持不变。我已经有了userform,并且以这样一种方式编码,即在文本部分中填充适当的空格,并将其包含在电子邮件正文中,但是我还没有弄清楚如何包含该表

以下是我迄今为止尝试添加表的内容:

Sub SendEmailwhat_address作为字符串,subject_行作为字符串,mail_body作为字符串,claim_info作为范围

Dim olApp作为Outlook.Application 设置olApp=CreateObjectOutlook.Application

Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)

olMail.To = what_address
olMail.Subject = subject_line
olMail.Body = mail_body
olMail.HTMLBody = RangeToHtml.claim_info
olMail.Send
端接头 次级索赔

Dim mail_body_message As String
Dim tracking_number As String
Dim amount_paid As String
Dim date_paid As String
Dim payment_due As String
Dim claim As Range

Set claim = Nothing
On Error Resume Next
'Only send the visible cells in the selection.
Set claim = Selection.SpecialCells(xlCellTypeVisible)
Set claim = Sheets("Sheet1").RangeToHtml("B2:C9").SpecialCells(xlCellTypeVisible, xlTextValues)
On Error GoTo 0

mail_body_message = Sheet1.Range("A1")
tracking_number = Sheet1.Range("G2")
amount_paid = Sheet1.Range("G3")
date_paid = Sheet1.Range("G4")
payment_due = Sheet1.Range("G5")
mail_body_message = Replace(mail_body_message, "replace_tracking", tracking_number)
mail_body_message = Replace(mail_body_message, "replace_amountpaid", amount_paid)
mail_body_message = Replace(mail_body_message, "replace_datepaid", date_paid)
mail_body_message = Replace(mail_body_message, "replace_pmtdueto", payment_due)



Call SendEmail("email@email.com", "Subject Line", mail_body_message, claim)
MsgBox完成


End Sub

我认为您的问题在于试图将olMail.Body和olMail.HTMLBody合并到同一条消息中。根据我的经验,您需要选择一个,而该表将无法与olMail.Body一起使用

我建议将邮件正文转换为有效的HTML并附加到olMail.HTMLBody:

Sub SendEmail(what_address As String, subject_line As String, mail_body As String, claim_info As Range)

Dim olApp As Outlook.Application Set olApp = CreateObject("Outlook.Application")
Dim olApp As Outlook.Application Set olApp = 
CreateObject("Outlook.Application")

Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)

olMail.To = what_address
olMail.Subject = subject_line
'assuming your mail_body uses vbLf for linefeeds you can just do this
mail_body = "<p>" & replace(mail_body,vblf,"</br>") & "</p>"
olMail.HTMLBody = mail_body & "</br>" & RangeToHtml.claim_info
olMail.Send
End Sub