[英]Permission Denied Error During Update of a Local MSOffice Add-In from Network
我正在尝试在 PowerPoint 2003 中编写一个程序,允许自动更新已安装的加载项。 一般流程如下:
卸载加载项
For Each objAddIn In Application.AddIns If UCase(objAddIn.Name) = UCase(AddInName) Then With objAddIn .Registered = msoFalse .AutoLoad = msoFalse .Loaded = msoFalse End With End If Next
从本地加载项目录中删除文件
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(FileName) Then Set objFSO = Nothing Kill FileName End If
从网络位置复制文件
安装更新的加载项
到达第 2 步后,任何使用 FileSystemObject 或直接Kill
删除卸载后文件的尝试都不可避免地会生成Run-time error '70': Permission denied
。 如果我点击调试然后播放,它会运行,好像从来没有问题一样。
旁注:我意识到我可以使用 FSO 覆盖本地文件,但这给了我相同的运行时错误。
我猜这个问题与正在使用的文件的某些方面有关,但我不知道如何“释放”旧的加载项,以便可以删除基础文件。
有没有人有洞察力可以提供帮助?
您需要先将其从 Addins Collection 中删除,然后才能物理删除。 把这个放在你的End With
:
Application.AddIns.Remove objAddIn.Name
参考可用于检查锁定文件的 VBA 函数的知识库文章在这里。 http://support.microsoft.com/kb/209189
它包含一个简单的函数,您可以将其添加到 VBA 中以检查文件是否未锁定,并使用 Otaku 在其答案中引用的相同代码示例。
我要做的是...
替换代码中的 Kill Filename 行
If FileLocked(Filename) = True Then
SetAttr Filename, vbNormal
Kill Filename
End If
*其中 FileLocked 是 KB209189 中提到的自定义函数
**如果这不起作用,请回复,我们还可以考虑将上面的 Kill 语句替换为执行相同操作的较低级别的 Win32 函数(但可能更彻底)。 :D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.