将未保存的 Excel 文件附加到电子邮件

Posted

技术标签:

【中文标题】将未保存的 Excel 文件附加到电子邮件【英文标题】:Attaching unsaved Excel file to email 【发布时间】:2018-03-24 13:54:53 【问题描述】:

我有一个 Excel 表格供用户填写并作为附件发送(无需将其保存在本地计算机上)。

代码有效。

Dim Names()
Names = Array("testmail@gmail.com")
ActiveWorkbook.SendMail _
Recipients:=Names(), _
Subject:="Test subject"

我希望在用户附加附加文件(在他们的本地计算机上找到)之前创建电子邮件而不发送。

我写了以下代码:

Dim olapp As Object
Dim olmail As Object
Dim wb As Workbook
Set olapp = CreateObject("outlook.application")
Set olmail = olapp.CreateItem(olMailItem)
Set wb = ActiveWorkbook

With olmail
.To = "testmail@gmail.com"
.Subject = "Test Subject"
.Body = ""
.Attachments.Add wb.FullName
.Display

我的问题是只有最新保存的副本会附加到创建的电子邮件中,并且由于用户不会将表单/Excel 文件存储在本地计算机上,因此将是一个空表单(或最后保存的表单)附在电子邮件中。

有什么方法可以创建带有工作簿副本但不发送的电子邮件?

【问题讨论】:

是的。您可以将最新版本的文件(由用户填写)保存到他们的“C:”,甚至是网络文件夹上的路径。将其附加到电子邮件中,然后删除保存的文件。 如果您要后期绑定 Outlook 对象模型,则 olMailItem 常量/枚举未定义,因此被视为任何未声明的变量,即包含 @ 的隐式 Variant 987654325@,隐式转换为0。如果该代码在没有引用 Outlook 类型库的情况下编译,则未指定 Option Explicit,这意味着会出现更多问题。如果引用了 Outlook ,则只需将 New 向上添加 Outlook.Application 并将其声明为 As Outlook.Application,而不是使用后期绑定的 Object。您也将获得 IntelliSense! 【参考方案1】:

我在即时窗口中尝试了这个单行,它成功地发送了一个未保存的文件:Application.Workbooks("Book2").SendMail("my.email@company.com","Test Subject") 在我的示例中,您可以使用代码中的 wb 而不是 Application.Workbooks("Book2")。请注意,这将发送电子邮件,无法对其进行编辑。

【讨论】:

以上是关于将未保存的 Excel 文件附加到电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过电子邮件发送 oracle 查询结果。我更喜欢以 excel 文件的形式附加到电子邮件中。

使用存储过程中的数据创建 Excel 文件,以将其附加到 Power Automate 中的电子邮件中

将sql查询结果导出到csv或excel

如何将位图文件附加到电子邮件

无法打开流式文件附件

使用 Rails 5.2 ActiveStorage 创建和保存 pdf 并稍后附加到电子邮件