使用 vba 在 Outlook 电子邮件中添加 Excel 工作表作为附件

Posted

技术标签:

【中文标题】使用 vba 在 Outlook 电子邮件中添加 Excel 工作表作为附件【英文标题】:Add an excel sheet as attachment on outlook email with vba 【发布时间】:2021-02-11 00:42:20 【问题描述】:

我正在尝试使用 VBA 从我的 excel 文件中发送整个工作表 ("SEND") 作为附件,我使用以下代码来完成它:

我收到以下错误:对象的变量或变量“with”未定义, 代码有什么问题?

Sub Sendemail()
Dim xOutlookObj As Object
Dim xEmailObj As Object
Dim tempFile As String
Dim strbodymsg As String
Dim wb As Workbook
Dim tempWB As Workbook

tempFile = ActiveWorkbook.Path & "\sheets_copy.xlsx"

Set wb = wb.Sheets("SEND")
wb.Save
wb.Sheets(Array("SEND")).Copy
Set tempWB = ActiveWorkbook

If Len(Dir(tempFile)) <> 0 Then
    Kill tempFile
End If

' Save & close the tempFile
tempWB.SaveAs tempFile
tempWB.Close

strbody = "Hello"
 
'Create Outlook email
Set xOutlookObj = CreateObject("Outlook.Application")
Set xEmailObj = xOutlookObj.CreateItem(0)
    
On Error Resume Next
With xEmailObj
    .Display
    .To = "email1@gmail.com"
    .Cc = "email2@gmail.com"
    .Subject = "Email Test"
    .Attachments.Add tempFile
    .htmlBody = strbody
    If DisplayEmail = False Then
        '.Send
    End If
End With
    
On Error GoTo 0

Set xEmailObj = Nothing
Set xOutlookObj = Nothing

End Sub()

【问题讨论】:

当然,在添加Dim xOutlookObj As Object 之后对我来说工作正常。你一定把它从你的复制/粘贴中去掉了? 你是对的,我只是忘了复制它,但在我的电脑上它不工作 明天上班再试试看能不能用 我在这里确实遇到了一个错误...Set wb = wb.Sheets("SEND") - 因为您正在尝试将Worksheet 对象设置为Workbook 变量...并且您尝试在设置之前使用 wb任何有效的东西......也许先尝试修复这些东西? (我最初评论了这些事情,因为您说问题出在您的 With 语句上。)您可能还想包含 Option Explicit 并删除该错误处理。 请记住,您不附加Worksheet,而是附加Workbook - 确保您了解两者之间的区别。 【参考方案1】:
Sub Sendemail()
Dim xOutlookObj As Object
Dim xEmailObj As Object
Dim tempFile As String
Dim strbodymsg As String
Dim wb As Workbook
strbody = "Hello"
Application.DisplayAlerts = False
ThisWorkbook.Sheets("SEND").Copy
Set tempWB = ActiveWorkbook 'previous command opens instantly

' First you can only save the file as.

tempWB.SaveAs filename:=""

'variable from userform or string outputs into default documents folder as xls

'Create Outlook email=============
Set xOutlookObj =                 
CreateObject("Outlook.Application")
Set xEmailObj = xOutlookObj.CreateItem(0)
On Error Resume Next
    With xEmailObj
        .Display
        .To = "email1@gmail.com"
        .Cc = "email2@gmail.com"
        .Subject = "Email Test"
        .Attachments.Add tempWB.FullName      
'previously saved workbook with single sheet
    .HTMLBody = strbody
    If DisplayEmail = False Then
        '.Display
        '.Send
    End If
End With
'then dealing with the "tempfile"
tempWB.ChangeFileAccess Mode:=xlReadOnly
Kill tempWB.FullName
tempWB.Close savechanges:=False  'first kill then close
Application.DisplayAlerts = True
Set xEmailObj = Nothing
Set xOutlookObj = Nothing
End Sub

我认为您的问题现在已经解决了。但是我发布了我对您的代码的修改。对我来说它有效。

【讨论】:

以上是关于使用 vba 在 Outlook 电子邮件中添加 Excel 工作表作为附件的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA Excel 浏览文件夹以在 Outlook 邮件中附加文件 [重复]

访问 VBA 以表格格式将查询结果发送到 Outlook 电子邮件

使用电子邮件 Outlook 中的链接触发 VBA 代码

使用 VBA 宏选择和复制 Outlook 电子邮件正文

使用 VBA 禁用 Outlook 安全设置

VBA 在 Outlook 中粘贴带有图表的特定 excel 范围