[英]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.