VBA刪除工作表:1行基本語法與4種輔助程式

VBA刪除工作表是常見的Excel自動化操作,本文先介紹相關的基本語法,進而補充設置提醒機制和錯誤處理,以及如何利用陣列及集合概念一次刪除多工作表。

一、VBA刪除工作表

VBA編輯器左側的物件視窗可以看到目前的活頁簿檔案有7個工作表,在此想要刪除第1張工作表,VBA程式刪除工作表的語法相當簡單,只要指定特定工作表的名稱,然後使用一般常見的Delete方法:「Sheets(“工作表1”).Delete」。

VBA刪除工作表:1行基本語法與4種輔助程式

二、永久刪除確認

執行上個步驟的程式,和在Excel手工刪除工作表一樣,會跳出確定是否永久刪除此工作表的提醒視窗,這裡同時可以看一下在目前的活頁簿確實是有七張工作表。

E49k21

三、Application.DisplayAlerts

Excel提醒確認的機制雖然很好,可是VBA設計程式應該會希望它直接刪除工作表,不用再提醒了,因為這樣子就沒有達到完全自動化取代手工操作的效果。在這種情況可以使用:「Application.DisplayAlerts = False」的語法,它的作用就是關閉提醒視窗。

雖然關閉提醒對於程式執行很方便,不過這是在程式執行階段,當程式執行完畢了,使用者繼續Excel手工操作,這個時候如果使用者自己手工刪除工作表卻沒有出現提醒,通常是比較不習慣,因此在程式語句刪除工作表之後,實務上通常會再加一個將提醒視窗重新開啟的語句:「Application.DisplayAlerts = ture」,也就是回到正常狀態,如此VBA程式跟Excel操作兩者不會有所衝突。

E49k31

四、陣列索引錯誤

上個步驟提到VBA程式執行和Excel手工操作的性質差異,在設計程式時常常會遇到一個情況,例如這裡看到的「陣列索引超出範圍」的錯誤,這個其實也是VBA和Excel的差別。

在Excel刪除工作表的時候,一定是先選取某個存在的工作表才能夠進行刪除,可是在VBA程式裡面的工作表名稱可以是個任意的文字字串,當設定一個不存在的工作表名稱要叫VBA去執行刪除,顯然它是沒有辦法執行的,根本找不到這個工作表,因此就會出現這裡所看到的執行錯誤,找遍了整個活頁簿中的工作表也找不到執行對象,這個為何在很多時候設計程式操作之前,會先進行操作對象是否存在的確認判斷,原因就是為了要避免出現意外的錯誤。

E49k41

五、On Error Resume Next

因為找不到對象而無法操作的錯誤可以理解,可是站在程式順利執行的角度而言,應該會希望對象找不到的話,那就不要操作就好了,因為大部份案例是我的程式並非只有這個部分,會希望程式能夠繼續走下去。像這種情況可以在有可能會產生錯誤的語句簡單預防,例如這裡是在刪除工作表的前面加上一行:「On Erorr Resume Next」,意思是有錯誤沒關係,直接跳過執行下一行。

處理完可能錯誤之後,跟先前第三步驟的提醒視窗同樣道理,有錯誤直接忽略是比較不正常的狀態,因此在忽略之後最好再馬上加上:「On Error GoTo 0」,讓VBA錯誤狀態歸零回到正常之後,再繼續執行接下去的語句,後續執行如果有發生錯誤的話,仍然是要中斷並且跳出提醒視窗。

E49k51

六、分散工作表刪除

實務上還有個情況是想要一次刪除多個工作表。例如說想要刪除分散的特定名稱多工作表,可以利用陣列多資料組的特性,Array函數把多個工作表名稱組成一組陣列,作為工作表集合中的指定對象,例如這裡的「工作表3」跟「工作表4」,完整語句:「Sheets(Array(“工作表3”, “工作表4”)).Delete」,執行程式果然一次將這兩個特定的工作表刪除了。

E49k61

七、集合工作表刪除

上個步驟提到對象集合和陣列資料集的概念,其實可以把它想做在Excel活頁簿裡面例如有12345依序排列的5張工作表,這5張工作表形成了一個有連續序號的陣列,程式中的序號通常是Index屬性,因此利用這個特性簡單設置一個集合迴圈:「For Each S In ThisWorkbook.Sheets」,這裡的範例程式是要將目前活頁簿中只要是在目前的工作表之後的工作表予以刪除:「If S.Index > ActiveSheet.Index Then…」。

E49k71

八、執行結果確認

最後以快速鍵Alt加F11回到Excel操作畫面,由於上個步驟是選取「工作表5」的狀態,也就是「工作表5」是目前工作表,因此工作表6和工作表7等之後的其他工作表都已經被刪除了,確認程式執行沒有問題。

E49k81

Excel對象與VBA語法

這篇文章主要操作是刪除工作表﹐它的語法相對簡單,不過在實際執行的時候可能必須進行錯誤處理,或者是提醒機制的設置,因應實際需求也許又會用到陣列跟集合的觀念,從這裡可以見得設計VBA程式不但要熟悉Excel對象的屬性和方法,還要對於一般程式語法有些基本概念,才能夠更加的靈活開發專案。

參考資源:

  1. 微軟說明頁面:Worksheet.Delete 方法 (Excel)
  2. 贊贊小屋VBA教學程式庫
  3. 贊贊小屋VBA教學手冊

最新文章: