如何复制excel表格到outlook邮件?

博主承接各种外包项目,专业技能覆盖广泛技术栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主承接各类外包,有意请点击查看博主技术栈

Public Sub sendEmail(strSentTo As String, strCC As String, strSubject As String, strBody As String, rng1 As Range)
    
    'strExecCmd = "Mailto:" & strSentTo & "&Subject=" & strSubject & "&body=" & strBody '& "&cc=" & strCc
    'CreateObject("WScript.Shell").Run strExecCmd
    'Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    'Set rng = Nothing
    'Set rng = ActiveWorkbook.Worksheets(2).UsedRange
    
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    
    On Error Resume Next
    With OutMail
        .To = strSentTo
        .CC = strCC
        .BCC = ""
        .Subject = strSubject
        .HTMLBody = strBody & RangetoHTML(rng1)
        .Display   'or use .Display
    End With
    On Error GoTo 0
    
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub


Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2010
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook
 
    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
 
    'Copy the range and create a new workbook to past the data in
    rng.SpecialCells(xlCellTypeVisible).Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        '.Cells(1).PasteSpecial Operation:=SkipBlanks
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With
 
    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
 
    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")
 
    'Close TempWB
    TempWB.Close savechanges:=False
 
    'Delete the htm file we used in this function
    Kill TempFile
 
    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

以下是 VBA 代码,可以将 Excel 中的 Sheet 复制到 Outlook 邮件正文并发送邮件: ```VBA Sub SendSheetInEmail() Dim outlookApp As Outlook.Application Dim outlookMail As Outlook.MailItem Dim excelSheet As Worksheet Dim tempFile As String 'Create a temporary file to store the sheet as an HTML file tempFile = Environ$("temp") & "\" & ActiveSheet.Name & ".html" ActiveSheet.PublishObjects.Add(xlSourceSheet, tempFile, ActiveSheet.Name, "", xlHtmlStatic).Publish (True) 'Create a new email Set outlookApp = New Outlook.Application Set outlookMail = outlookApp.CreateItem(olMailItem) 'Set the email properties With outlookMail .To = "recipient@example.com" .Subject = "Sheet " & ActiveSheet.Name & " from " & ThisWorkbook.Name .HTMLBody = "Hello," & vbCrLf & _ "Please find attached the sheet " & ActiveSheet.Name & " from " & ThisWorkbook.Name & "." & vbCrLf & _ "Best regards,<br>" & _ "Your Name" .Attachments.Add tempFile .Display 'or .Send to directly send the email End With 'Delete the temporary file Kill tempFile 'Clean up Set outlookMail = Nothing Set outlookApp = Nothing End Sub ``` 此代码将当前活动的 Sheet 复制为 HTML 文件,将该文件作为附件添加到邮件中,并在邮件正文中添加一条消息。 若要将多个 Sheet 添加到邮件正文中,则需要将每个 Sheet 复制为 HTML 文件,并将所有文件合并为单个文件,然后将该文件添加到邮件正文中。 请注意,此代码需要 Outlook 客户端才能发送邮件。 如果没有 Outlook 客户端,则需要使用其他方法发送邮件,例如使用 SMTP 服务器发送邮件
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值