关闭后立即删除文件 - '权限被拒绝'错误
问题描述:
我想通过宏将电子邮件保存为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中遇到麻烦。这是可能的解决方案还是还有其他我错过的东西?
答
我已经能够得到这个通过完全退出Word之前简单地关闭Word文档工作始终:
objWrdDoc.Close
objWrd.Quit
Set objWrd = Nothing
错误一直没有出现,因为加入这一行,并与各种电子邮件测试。
你在公司网络中的服务器上工作的任何机会?因为文件在关闭后被锁定的时间可能会有所不同,所以我怀疑你可以添加一个处理程序来检查'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' –