Excel VBA使用CDO发送格式化电子邮件
我有这个代码,这是有效的Excel VBA使用CDO发送格式化电子邮件,excel,vba,Excel,Vba,我有这个代码,这是有效的 Private Sub CommandButton1_Click() Dim Mail As New Message Dim Config As Configuration Set Config = Mail.Configuration Dim cell As Range Dim strbody As String For Each cell In Sheets("Sheet1").Range("C2:D9") strbody =
Private Sub CommandButton1_Click()
Dim Mail As New Message
Dim Config As Configuration
Set Config = Mail.Configuration
Dim cell As Range
Dim strbody As String
For Each cell In Sheets("Sheet1").Range("C2:D9")
strbody = strbody & cell.Value & vbNewLine
Next
Config(cdoSendUsingMethod) = cdoSendUsingPort
Config(cdoSMTPServer) = "smtp.gmail.com"
Config(cdoSMTPServerPort) = 25
Config(cdoSMTPAuthenticate) = cdoBasic
Config(cdoSMTPUseSSL) = True
Config(cdoSendUserName) = "MyEmail"
Config(cdoSendPassword) = "EmailPassword"
Config.Fields.Update
Mail.To = Sheets("Sheet1").Range("j2").Value
Mail.From = Config(cdoSendUserName)
Mail.Subject = "Email Subject"
Mail.TextBody = strbody
If G9 = "Yes" Then
Mail.AddAttachment "C:\...file1.xls"
Mail.AddAttachment "C:\...file2.xls"
End If
On Error Resume Next
Mail.Send
If Err.Number <> 0 Then
MsgBox Err.Description, vbCritical, "There was an error"
Exit Sub
End If
MsgBox "Your email has been send!", vbInformation, "Sent"
End Sub
Private子命令按钮1\u单击()
将邮件设置为新邮件
Dim配置为配置
Set Config=Mail.Configuration
暗淡单元格作为范围
像弦一样暗的链子
表中的每个单元格(“表1”)。范围(“C2:D9”)
strbody=strbody和cell.Value和vbNewLine
下一个
配置(cdoSendUsingMethod)=cdoSendUsingPort
配置(cdoSMTPServer)=“smtp.gmail.com”
配置(cdoSMTPServerPort)=25
配置(cdoSMTPAuthenticate)=cdoBasic
配置(cdoSMTPUseSSL)=真
配置(cdoSendUserName)=“MyEmail”
配置(cdoSendPassword)=“EmailPassword”
Config.Fields.Update
Mail.To=Sheets(“Sheet1”).范围(“j2”).值
Mail.From=Config(cdoSendUserName)
Mail.Subject=“电子邮件主题”
Mail.TextBody=strbody
如果G9=“是”,则
Mail.AddAttachment“C:\…file1.xls”
Mail.AddAttachment“C:\…file2.xls”
如果结束
出错时继续下一步
邮寄
如果错误号为0,则
MsgBox Err.Description,vbCritical,“发生错误”
出口接头
如果结束
MsgBox“您的电子邮件已发送!”,vbInformation,“已发送”
端接头
它将采用我在C2:D9中的文本,但它的格式与工作表中的格式不同,因此发送时看起来像这样:
项目1结果1
项目2
结果2
项目3
结果3
项目4
结果4 如果我将Mail.TextBody设置为Mail.HTMLBody,结果如下: 项目1结果1项目2结果2项目3结果3项目4结果4 我怎样才能让它在excel工作表中格式化时准确地发送这些范围内的内容? 如果我手动复制这些单元格并将它们粘贴到电子邮件正文中,它将保留单元格结构、字体大小、字体颜色以及任何背景颜色 第1项结果1
第2项结果2
第3项结果3
项目4结果4 我一直在网上寻找很多,试图找到这一点,但没有能够为CDO。我找到了一些Outlook项目,但我没有使用Outlook 是否可以使用发送电子邮件的CDO电子邮件方法发送格式化的单元格块
谢谢。使用HTML格式邮件的示例如下。您需要包括正确的标记:
Set OutApp = New Outlook.Application
Set OutMail = OutApp.CreateItem(olMailItem)
With OutMail
fEmailTOSend = RepEmailTO
.To = "me@me.co.uk"
.Subject = "report created " & strdate
.BodyFormat = 2 '<<HTML
.importance = 2 '<<High
.HTMLBody = "<P>" & _
"<BR>" & _
"<FONT face=""Lucida Sans Unicode"" size=2.5>" & _
myEmailNarrative & _
"<BR>" & _
"Kind Regards," & _
"<BR>" & _
"<FONT color=#0000ff>" & _
ProfileName & "." & _
"</FONT>" & _
"</FONT>" & _
"</P>" & _
"</BODY></HTML>"
.Attachments.Add wb.FullName
.Save
.Send
End With
Set-OutApp=新建Outlook.Application
Set-OutMail=OutApp.CreateItem(olMailItem)
发邮件
fEmailTOSend=RepEmailTO
.To=”me@me.co.uk"
.Subject=“已创建报告”&strdate
.BodyFormat=2'我建议您使用HTML来格式化电子邮件的正文。因此,基本上,当使用此方法时,它会删除所有格式数据,为了获得任何格式数据,我需要将HTML编码到VBA中?有没有办法让VBA读取任何格式,以便在不更改VBA代码的情况下使其成为动态的?例如,如果我一次发送的item1上有红色文本,但下一次发送的文本现在是蓝色的,基于条件格式?@DA69是的,您可以-就VBA而言,HTML只是一个长字符串。因此,您可以包括根据某些规则更改字符串的IF语句,例如如果x为负,则RedHTMLtags else BlueHTMLtags