Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA使用CDO发送格式化电子邮件_Excel_Vba - Fatal编程技术网

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