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

将未保存的Excel文件附加到电子邮件,excel,vba,email,outlook,Excel,Vba,Email,Outlook,我有一个Excel表格供用户填写并作为附件发送(无需将其保存在本地计算机上) 代码是有效的 Dim Names() Names = Array("testmail@gmail.com") ActiveWorkbook.SendMail _ Recipients:=Names(), _ Subject:="Test subject" 我想电子邮件只是创建,不发送,直到用户附加了一个额外的文件(在他们的本地计算机上找到) 我编写了以下代码: Dim olapp As Object Dim olma

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


有没有办法创建一封包含工作簿副本的电子邮件,但不发送它?

我在即时窗口中尝试了这一行,它成功地发送了一个未保存的文件:
Application.Workbooks(“Book2”).SendMail(“my”)。email@company.com“,”测试主题“
您可以从代码中使用wb,而不是从应用程序中使用wb。工作簿(“Book2”)在我的示例中。请注意,这将发送电子邮件,不可能对其进行编辑。

是。您可以保存文件的最新版本(由用户填写)将其附加到电子邮件,然后删除保存的文件。如果您延迟绑定Outlook对象模型,则不会定义
olMailItem
constant/enum,因此将其视为任何未声明的变量,即隐式
Variant
,其中包含
vbEmpty
,这意味着icitly转换为
0
。如果该代码在编译时未引用Outlook类型库,则不会指定
选项Explicit
,这意味着可能会出现更多问题。如果引用Outlook,则只需
新建
Outlook.Application
并在中将其声明为Outlook.Application
不要使用后期绑定的
对象
。您还可以获得IntelliSense!