附加到电子邮件后删除文档
Posted
技术标签:
【中文标题】附加到电子邮件后删除文档【英文标题】:Delete document after attaching to email 【发布时间】:2017-03-31 04:21:09 【问题描述】:这里是新手。我用提交按钮创建了一个启用宏的 word 文档。该文档是只读的,所以我要做的是让它保存一个临时文件,附加临时文件,然后将其删除。很简单,对吧?一切正常,除了它不会删除。附件是提交按钮的代码。请帮忙!谢谢。
Public Sub SubmitButton_Click()
Dim OL As Object
Dim EmailItem As Object
Dim Doc As Document
Dim sTempFilePath As String
Application.ScreenUpdating = False
sTempFilePath = ("C:\temp\test.doc")
Set OL = CreateObject("Outlook.Application")
Set EmailItem = OL.CreateItem(olMailItem)
Set Doc = ActiveDocument
ActiveDocument.SaveAs FileName:="C:\temp\test.doc"
With EmailItem
.Subject = "Application For Leave Form"
.To = "email@email.com"
.Attachments.Add sTempFilePath
.Send
End With
Application.ScreenUpdating = True
Set OL = Nothing
Set EmailItem = Nothing
Set Doc = Nothing
ActiveDocument.Close
Kill sTempFilePath
End Sub
为简单起见,我取出了很多代码,但它仍然没有删除文件。这有什么问题?
Public Sub SubmitButton_Click()
Dim Doc As Document
Dim sTempFilePath As String
sTempFilePath = ("C:\temp\test.doc")
Set Doc = ActiveDocument
ActiveDocument.SaveAs FileName:="C:\temp\test.doc"
ActiveDocument.Close
Kill sTempFilePath
End Sub
【问题讨论】:
你好。检查this answer 看看是否有帮助 请更新您的问题并在此处发布代码 我不熟悉 Word 的 VBA,但通过调试代码我注意到在ActiveDocument.Close
行中,您实际上正在关闭正在运行宏的文档,因此 Kill sTempFilePath
永远不会执行
这绝对有道理!关于我应该如何去做的任何想法?如果我将 Kill 移到它上面,我会收到拒绝访问错误(正在使用中)。
看我的回答,虽然 user3598756 也提供了替代解决方案
【参考方案1】:
您可以将新文档作为副本添加到当前文档,并将该副本保存到所需位置。然后,一旦关闭文件,您将关闭新创建的文件并可以成功删除它。 这对我有用,希望对你有用。
查看您的 sn-p 的代码:
Dim Doc As Document
Dim sTempFilePath As String
sTempFilePath = ("C:\temp\test.doc")
'the next line copies the active document
Application.Documents.Add ActiveDocument.FullName
ActiveDocument.SaveAs FileName:="C:\temp\test.doc"
ActiveDocument.Close
Kill sTempFilePath
将此应用于您的工作代码,您将拥有:
Public Sub SubmitButton_Click()
Dim OL As Object
Dim EmailItem As Object
'Dim Doc As Document 'not needed
Dim sTempFilePath As String
Application.ScreenUpdating = False
sTempFilePath = ("C:\temp\test.doc")
Set OL = CreateObject("Outlook.Application")
Set EmailItem = OL.CreateItem(olMailItem)
'Set Doc = ActiveDocument ' not needed
Application.Documents.Add ActiveDocument.FullName
ActiveDocument.SaveAs FileName:="C:\temp\test.doc"
With EmailItem
.Subject = "Application For Leave Form"
.To = "email@email.com"
.Attachments.Add sTempFilePath
.Send
End With
Application.ScreenUpdating = True
Set OL = Nothing
Set EmailItem = Nothing
'Set Doc = Nothing
ActiveDocument.Close
Kill sTempFilePath
End Sub
参考:http://www.vbaexpress.com/kb/getarticle.php?kb_id=961
【讨论】:
谢谢大家!我明天将再次深入研究它,我一定会发布结果。 维克多,谢谢。这很完美。更好的是它不会关闭原始文件,因此用户可以在不重新打开的情况下填写几次。惊人的。不过,我想知道,将附件和主题行重命名为“请假申请表 - 头尾”(如在 Word 表单中填写的姓名)有多难?名字和姓氏放在 Word 中的“富文本内容控件”中。 我很高兴为您解决了问题。正如我之前提到的,我对 Word 的 VBA 了解不多,但我认为您可以在 here、here 和 here 中了解您需要的内容。如果您在那之后有问题,我会在新问题中发布另一个问题。快乐编码:)【参考方案2】:使用FileSytemObject()
对象复制想要的文件,最后删除它
这是一个后期绑定的例子
Public Sub SubmitButton_Click()
Dim sTempFilePath As String
sTempFilePath = ("C:\temp\test.doc")
With CreateObject("Scripting.FileSystemObject") '<--| instantiate a running instance of 'FileSystemObject' object
.CopyFile ActiveDocument.FullName, sTempFilePath '<--| copy active document into a new file
End With
'....code to process sTempFilePath
Kill sTempFilePath '<--| and finally... kill it!
End Sub
【讨论】:
以上是关于附加到电子邮件后删除文档的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 和 Nodemailer:我们可以将 PDF 文档附加到电子邮件中吗?
从NSString中删除一些特殊字符,以获取附加到电子邮件的文件名PDF