Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 发送电子邮件代码发送的是一个空白文件,除非先保存模板_Excel_Vba - Fatal编程技术网

Excel 发送电子邮件代码发送的是一个空白文件,除非先保存模板

Excel 发送电子邮件代码发送的是一个空白文件,除非先保存模板,excel,vba,Excel,Vba,下面的代码在其他文件中用于发送有效的表单以供审阅和批准,但在此工作簿中,由于某些原因,我收到了发送的空白文件,用户添加的内容丢失。我知道这不是一个代码检查服务,但我想知道我是否错过了一些与此相关的内容-因此我需要在将文件附加到电子邮件之前“保存”该文件 'Open e-mail and create a new message Set OutlookApp = CreateObject("Outlook.Application") Set OlObjects = OutlookApp.G

下面的代码在其他文件中用于发送有效的表单以供审阅和批准,但在此工作簿中,由于某些原因,我收到了发送的空白文件,用户添加的内容丢失。我知道这不是一个代码检查服务,但我想知道我是否错过了一些与此相关的内容-因此我需要在将文件附加到电子邮件之前“保存”该文件

    'Open e-mail and create a new message
Set OutlookApp = CreateObject("Outlook.Application")
Set OlObjects = OutlookApp.GetNamespace("MAPI")
Set newmsg = OutlookApp.CreateItem(olMailItem)
Dim SubmitEMail As String: SubmitEMail = ws.Range("U1").Value


' set the requirements for the new message
With newmsg
    .Recipients.Add SubmitEMail
    .CC = ws.Range("U2").Value
    .Subject = "New Concession request form submitted"
'use string defined above as the main body of the message
    .Body = "Dear " & Location & "," & vbLf & vbLf & "Please find attached: a new Concession request.  Please review and indicate Concession number, or provide details of amendments needed." & vbLf & vbLf & "Regards," & vbLf & vbLf & SenderName
    .Attachments.Add wb.FullName
    .Display
End With
End If

MsgBox "Please review the E-Mail, Adding any additional recipients as required. add your signature and send to complete the submission"

电子邮件发送位工作正常,但附件始终为空,用户添加的数据丢失(如果用户首先将工作簿保存在其本地站点上),该过程工作正常,但是我不想让他们这么做,因为这可能会创建一个文档的两个版本,而我只需要一个版本)

您需要一个保存的工作簿来附加。如果要确保没有不需要的副本,可以执行以下操作:

  • 将工作簿的副本保存在临时文件夹中(使用
    SaveCopyAs
  • 将此副本附加到电子邮件并显示
  • 删除临时文件夹中的副本

如果调试子系统并使用
debug.Print wb.FullName
而不保存wb,则只会得到“Book(n)”名称。对于您的情况,我可以建议以下解决方案:

Dim文件名为字符串
'保存到临时目录
wb.SaveAs环境(“TEMP”)&wb.Name&“.xlsx”
'将全名保存到字符串变量
fileName=wb.FullName
'关闭文件以便能够删除它
wb.关闭
[附上文件]
'.Attachments.Add文件名
“并做你需要的其他事情]
'删除临时文件
终止文件名

这还可以让您避免要求用户保存文件,他们甚至不知道这一点。

是的,除非文件已保存并具有有效的文件名,否则您无法附加它。这是一个问题吗?是和否,理想情况下,我不希望用户必须保存文件,因为我们可能会得到重复的文件,这对于审计和其他方面来说是一个大问题。但是我在工作表中添加了一个临时文件名过程(我之前已经删除了这个过程,我认为这是没有必要的)。谢谢意大利,谢谢,这就是我最后所做的-我以前删除了很多更混乱的代码,做同样的事情,认为我不需要它。我现在更清楚了