2016-11-16 57 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