VBA檔案清理:程式刪除Excel名稱及切斷外部連結

Excel開啟檔案很慢或卡住時,可能需要刪除名稱和切斷連結。本文先錄製巨集參考相關操作的程式碼,進而以For Each…Next迴圈刪除名稱(Names),If Not…Then條件式切斷連結(BreakLink)。

一、Excel錄製巨集

贊贊小屋先前有文章介紹如何刪除Excel外部檔案連結,在這裡想要錄製成巨集作為程式設計參考,在操作前先利用自製的上方功能區,垂手可得「錄製巨集」,編輯名稱為「Delete」,按「確定」。

利用自製的上方功能區

二、匯出VBA程式

在錄製巨集的時候刪除Excel連結,完成錄製後進入VBA,可以看到剛才操作背後的程式碼,這部份操作流程可參考贊贊小屋相關文章。VBA操作介面的左邊有個「匯出檔案」,是將VBA程式碼另存,因為原檔案一旦執行,名稱及連結即被刪除,必須在新檔案再匯入程式碼,比較好測試成效。

可以看到剛才操作背後的程式碼

三、Excel名稱Names

錄製的巨集是刪除特定的名稱和連結,但我們目的是刪除所有名稱和連結,因此必須修改巨集。仔細看程式碼,有兩個關鍵字「Names」和「BreakLink」。在Excel官方支援中心,可知「Application.names屬性」代表使用中活頁簿中所有的名稱。

Application.names屬性

四、程式設計出錯

嘗試參考所錄製的巨集程式碼,編寫「ActiveWorkbook.Names.Delete」,執行後發現此路不通:「物件不支援此屬性或方法」。

ActiveWorkbook.Names.Delete

五、For Each迴圈流程

從Names代表所有名稱、而且錄製程式中每個Names有括號指定名稱的特性而言,合理想法為For Each Next依次將每個名稱刪除,修改後的程式碼如圖所示,實地測試真的能刪除Excel中所有名稱。

合理想法為For Each Next依次將每個名稱刪除

六、VBA LinkSources

接著研究如何刪除連結。例如「LinkSources」,本意為:「Returns an array of links in the workbook. 」。

Returns an array of links in the workbook.

七、VBA BreakLink

最後修改完成的程式碼。其中「If Not IsEmpty(Links) Then」為判斷是否有連結,這是因為名稱可以統一刪除「Delete」,連結則是要有才能切斷「BreakLink」。實際測試,如果不加判斷式,第一次執行可順利切斷連結,到了第二次執行,程式會報錯,沒辦法完成,所以必須加判斷式。

If Not IsEmpty(Links) Then

Excel巨集到VBA程式

在Excel高效率工作心法中,自動化是最高層級的追求目標。這一節所介紹的小技巧:錄製巨集後瞭解程式、做點功課後再修改程式碼,便是Excel自動化的實戰課程。只要能製作成複合指令的懶人包,便是屬於自己威力強大的絕招。贊贊小屋下半年預計出版的書籍中,基本上是利用這個絕招將Excel插上翅膀,飛到一個全新領域,敬請期待。

學習清單:贊贊小屋VBA自動化文章合輯