2016-11-16 54 views
2

新手在这里。我用Submit按钮创建了一个支持宏的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 protected]" 
    .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 
+0

你好。检查[这个答案](http://stackoverflow.com/questions/67835/deleting-a-file-in-vba),看看它是否有帮助 –

+0

请更新您的问题,并发布代码 –

+0

我不熟悉VBA对于Word,但通过调试代码,我注意到在行'ActiveDocument.Close'中,实际上是关闭了正在运行宏的文档,因此'Kill sTempFilePath'永远不会被执行 –

回答

0

为例,用户可以添加新文档的副本当前文档并将该副本保存到所需的位置。然后,一旦关闭了文件,就会关闭新创建的文件并可以成功删除它。 这对我有用,并希望能为你工作。

请参阅您的片段代码:

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 protected]" 
    .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

+1

谢谢你们!我将在明天再次深入研究,我一定会发布结果。 – Mike

+1

Victor,谢谢。这工作完美。更好的是,它不会关闭原件,因此用户可以在不重新打开的情况下将其填充几次。真棒。然而,我想知道,将附件和主题行重新命名为“申请表格 - 最后一页”(如在Word表格中填写他们的名字和姓氏)有多难?名字和姓氏放在Word中的“Rich Text Content Control”中。 – Mike

+0

我很高兴为您解决问题。正如我之前提到的,我对Word的VBA知之甚少,但我认为你可以从[这里]开始学习你需要的东西(https://msdn.microsoft.com/zh-cn/library/office /f836891.aspx),在[这里](http://stackoverflow.com/questions/29524537/extract-data-from-content-controls-in-word-to-excel)和[在这里](http:///stackoverflow.com/questions/10823874/with-a-word-contentcontrol-datepicker-how-do-i-get-the-value)。如果您之后有问题,我会在新问题上发布另一个问题。快乐编码:) –

1

使用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