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中遇到麻煩。這是可能的解決方案還是還有其他我錯過的東西?
你在公司網絡中的服務器上工作的任何機會?因爲文件在關閉後被鎖定的時間可能會有所不同,所以我懷疑你可以添加一個處理程序來檢查'objWrdDoc.Documents.Count = 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
您應該用F8逐步測試代碼。它會顯示是否嘗試訪問該文件太快是問題所在。我曾經有一個刪除只讀文件的問題,所以如果是這種情況,那麼在殺死之前使用這個:'如果GetAttr(filePath&fileName)和vbReadOnly然後SetAttr(filePath&fileName),vbNormal' –