使用 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 邮件中附加文件 [重复]