2017-01-09 128 views
0

我想通過宏將電子郵件保存爲Word文件,然後通過Word將其替換爲轉換後的PDF文件。轉換部分工作正常 - 問題是當我嘗試刪除原始.doc文件。關閉後立即刪除文件 - '權限被拒絕'錯誤

Dim objWrd As Object 
Dim objWrdDoc As Object 
Dim wrdCurrentPrinter As String 

Set objWrd = CreateObject("Word.Application") 
Set objWrdDoc = objWrd.Documents.Open(filePath & fileName) 

''Print' file as PDF - current printer is stored so it can be reverted back afterwards 
wrdCurrentPrinter = objWrd.ActivePrinter 
objWrd.ActivePrinter = "Microsoft Print To PDF" 

'File name is specified here to avoid Save As prompt. PrintToFile property is 'True' 
objWrd.PrintOut , , , filePath & Replace(fileName, ".doc", ".pdf"), , , , , , , True 

objWrd.ActivePrinter = wrdCurrentPrinter 

objWrd.Quit 
Set objWrd = Nothing 

Kill filePath & fileName 

Kill filePath & fileName我得到錯誤70-權限被拒絕。

我能夠在沒有任何問題的情況下手動刪除文件,如果我添加一個斷點並逐步執行「Kill」行,它在Word關閉和Kill命令之間甚至出現輕微延遲時仍能正常工作。因此,我懷疑代碼處理速度如此之快,以至於在運行該命令時該文件仍處於打開狀態。

我有一種感覺,我可能需要走下去創建延遲的路線,我一直在Outlook中遇到麻煩。這是可能的解決方案還是還有其他我錯過的東西?

+0

你在公司網絡中的服務器上工作的任何機會?因爲文件在關閉後被鎖定的時間可能會有所不同,所以我懷疑你可以添加一個處理程序來檢查'objWrdDoc.Documents.Count = 0',否則循環,而不是''睡眠'一段固定的時間。 –

+0

如果我不是元帥,我總是有問題。你需要改變變量以使它適合你,但這裏是我所有互操作函數中「finally」塊的一個例子:[Begin Block] oBook.Close(False) oApp.Quit() Marshal .ReleaseComObject(oRange) Marshal.ReleaseComObject(oSheet) Marshal.ReleaseComObject(oBook) Marshal.ReleaseComObject(oBooks) Marshal.FinalReleaseComObject(oApp)[End Block]。我會從那裏開始,看看它是否得到糾正。我剛剛看到它是vba標記 - 對不起,如果沒有幫助 – Aaron

+0

您應該用F8逐步測試代碼。它會顯示是否嘗試訪問該文件太快是問題所在。我曾經有一個刪除只讀文件的問題,所以如果是這種情況,那麼在殺死之前使用這個:'如果GetAttr(filePath&fileName)和vbReadOnly然後SetAttr(filePath&fileName),vbNormal' –

回答

0

我已經能夠得到這個通過完全退出Word之前簡單地關閉Word文檔工作始終:

objWrdDoc.Close 
objWrd.Quit 
Set objWrd = Nothing 

錯誤一直沒有出現,因爲加入這一行,並與各種電子郵件測試。