我有我分發的Excel VBA代碼來生成一些報告。代碼有錯誤,我現在修復了它們。我想更新最終用戶。Excel VBA:SaveAs,然後查殺舊文件有權限錯誤
假設代碼在宏工作簿「software.xlsm」中,就像他們輸入的任何數據一樣。
我所做的是創建「軟件v1.0.1.xlsm」。它檢查「software.xlsm」的存在並將其中的所有數據和參數複製到它自己。然後將「software.xlsm」重命名爲「software v1.0.0.xlsm.old」,並將其自身保存爲「software.xlsm」。在這一點上,Excel非常高興這是該工作簿的新名稱。
剩下的就是刪除「更新」。但這是我遇到許可錯誤的地方--Excel不會讓我殺死它。它沒有在其他地方使用,並且好像Excel不放棄原始文件名。
這是我的代碼:
set newWb = ActiveWorkbook
thisName = newWb.FullName ' get full name of updater
newWb.SaveAs newWb.Path & "\software.xlsm" ' save updater as code file
Kill thisName ' delete updater <!! FAILS
我撕我的頭髮在這裏。我在網上查了一下,我在做什麼應該可以工作 - 但不是!
謝謝。
編輯:我應該提到,我也試過SetAttr
在文件上,這也沒有效果。
編輯2:我不確定我是否清楚自己想做什麼。我想擺脫updater一旦運行,以免混淆用戶。因此,我使用「另存爲」將更新程序保存爲一個新名稱,該名稱將兩個文件保留在磁盤上,並在Excel中打開一個文件。然後我試圖殺死/刪除在Excel中不再打開的文件(即,在我用新名稱保存之前的更新程序)。
您必須先關閉它,然後才能刪除它。 – braX
@braX儘管我已經完成了「SaveAs」?此時我在磁盤上有兩個文件 - 一個帶有新名稱,另一個帶有舊名稱。具有新名稱的名稱是開放的名稱,如Excel上的標題欄所示。它不能有_both_打開,可以嗎? 而且在任何情況下,工作簿都是帶有代碼的。如果關閉工作簿,則無法運行代碼將其刪除! 在網絡上的其他論壇中有這樣的例子,它顯示了正確的方式來做到這一點,下面有「它有效」的評論。 – StuartR143