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

3

我有一个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文件,因此将附加一个空表单(或最后保存的表单)到电子邮件中。

是否有一种方法可以创建带有工作簿副本但不发送它的电子邮件?


1
是的。您可以将用户填写的最新文件版本保存到他们的 C:\ 或甚至网络文件夹上的路径中。将其附加到电子邮件中,然后删除已保存的文件。 - Scott Holtzman
2
如果您正在使用后期绑定的Outlook对象模型,则olMailItem常量/枚举未定义,因此将被视为任何未声明的变量,即隐式包含vbEmptyVariant,它隐式转换为0。 如果该代码在没有对Outlook类型库的引用的情况下编译,则未指定Option Explicit,这意味着应该期望更多的问题。 如果引用了Outlook,则只需New Outlook.Application并将其声明为As Outlook.Application,而不是使用后期绑定的Object。 您还将获得IntelliSense! - Mathieu Guindon
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接