【发布时间】:2022-08-03 06:13:00
【问题描述】:
已经有很多关于将excel范围发送到outlook电子邮件的答案,但他们都将邮件撰写为HTML格式。
我找到了这段代码Link 并进行了一些调整,以将选择也包含为附件文件,它可以作为 HTML 格式使用,没有问题。
我需要使用 Excel vba 自动发送与 Rich Text email (outlook) 相同范围的单元格,而不是 HTML 格式。
在电子邮件的正文中,我需要以下内容:
1-包括格式化为表格的电子表格(选择)的一部分。
2- 在该表下插入附件(它将显示为图标)。
3-然后确定签名。
我可以手动完成所有这些任务,所以很可能可以通过使用 Excel VBA 来完成。
在下面的代码中,如果我创建了 objNewEmail.BodyFormat = olFormatRichText 并更改了 objNewEmail。带有objNewEmail.RTFBody的HTMLBody
然后我得到了以下问题:
A- 创建的电子邮件消息(以富文本形式合成)和单元格范围作为文件附加在正文上和签名之后。
B- 范围选择本身根本没有插入到正文中。
C- 我在 objNewEmail.RTFBody= 的行上得到了这个错误
运行时错误\'-1594818561 (a0f0ffff)\':操作失败
我必须展示我的完整代码,以便任何有兴趣帮助我的人更容易。
Option Explicit Option Compare Text Sub Sending_Range_as_Rich_Text_email_from_Outlook_using_Excel() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Dim objSelection As Excel.Range Set objSelection = Selection: objSelection.Copy Dim objTempWorkbook As Excel.Workbook Set objTempWorkbook = Excel.Application.Workbooks.Add(1) Dim objTempWorksheet As Excel.Worksheet Set objTempWorksheet = objTempWorkbook.Sheets(1) Dim strTempHTMLFile As String, Strbody As String Dim objTempHTMLFile As Object, objTextStream As Object Dim objFileSystem As Object Set objFileSystem = CreateObject(\"Scripting.FileSystemObject\") Dim objOutlookApp As Outlook.Application Dim objNewEmail As Outlook.MailItem \'Pasting into a Temp Worksheet With objTempWorksheet.Cells(1) .PasteSpecial xlPasteColumnWidths .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats End With \'Save the Temp Worksheet as a HTML File strTempHTMLFile = objFileSystem.GetSpecialFolder(2).path & \"\\Temp for Excel\" & Format(Now, \"YYYY-MM-DD hh-mm-ss\") & \".htm\" Set objTempHTMLFile = objTempWorkbook.PublishObjects.Add(xlSourceRange, strTempHTMLFile, objTempWorksheet.Name, objTempWorksheet.UsedRange.Address) objTempHTMLFile.Publish (True) \'Create a new Email Set objOutlookApp = New Outlook.Application Set objNewEmail = objOutlookApp.CreateItem(0) objNewEmail.BodyFormat = olFormatHTML \'Insert the Temp Worksheet into the Email Body Dim wb1 As Workbook: Set wb1 = ActiveWorkbook Dim TempFilePath As String: TempFilePath = Environ$(\"temp\") & \"\\\" Dim TempFileName As String: TempFileName = \"Output Data\" Dim FileExtStr As String: FileExtStr = \".xlsx\" wb1.SaveAs TempFilePath & TempFileName, FileFormat:=xlOpenXMLWorkbook objNewEmail.Attachments.Add TempFilePath & TempFileName & FileExtStr \'_________________________ objNewEmail.Display Set objTextStream = objFileSystem.OpenTextFile(strTempHTMLFile) Strbody = \"<h4>Dears,</h4>\" & \"<br>\" objNewEmail.HTMLBody = Strbody & \"<table style=\'Margin-Left:25pt\'>\" & _ objTextStream.ReadAll & \"</Table>\" & objNewEmail.HTMLBody objTextStream.Close objTempWorkbook.Close (False) objFileSystem.DeleteFile (strTempHTMLFile) Kill TempFilePath & TempFileName & FileExtStr \'Delete the temp Excel File Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
-
考虑添加 ms-word 标签。
-
@niton 添加了 ms-word 标签,明天早上我会回复你(我可以访问我的工作电脑)
标签: excel vba outlook ms-word office-automation