【分享成果,隨喜正能量】人一輩子都輸在一個等字,等不忙,等下次,等有時間,等有條件,人生最經不起等待,醒醒吧,別等老了才明白……。
《VBA代碼解決方案》(10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位於入門後的提高,在學習這套教程過程中,側重點是要理解及掌握我的「積木編程」思想。要靈活運用教程中的實例像搭積木一下把自己喜歡的代碼擺好。
這套教程共三冊,一百四十七講,內容覆蓋較廣,也是初級和中級間的過度教程,改版後的內容主要是提供程序源碼文件及代碼修正為32位和64位兼用代碼。今後一段時間會給大家陸續推出。今日的內容是第57講:VBA判斷工作表是否為空,符合後刪除
第五十七講 寫段VBA代碼,判斷工作表是否為空表,然後刪除
大家好,我們今日繼續講解VBA代碼解決方案的第57講內容:判斷工作表是否為空表。在實際的工作中,我們要常常判斷某個工作表是否為空的,那麼在VBA中是如何能做到這一點呢?
1 如何判斷工作表為空表
VBA中沒有專門的屬性或函數可以判斷工作表是否為空白工作表,可以使用自定義函數返回指定工作表是否為空工作表
- 知識點一:利用工作表函數CountA統計工作表已使用區域的非空單元格個數:COUNTA函數功能是返回參數列表中非空的單元格個數。利用函數 COUNTA 可以計算單元格區域或數組中包含數據的單元格個數。
- 知識點二:我們可以自定義一個函數,利用CountA統計工作表已使用區域的非空單元格個數,如果這個數值為0,那麼這個工作表就是空的。
首先看看我們的自定義函數,如下面的代碼所示。
Function MyIsBlankSht(Sh As Variant) As Boolean
If TypeName(Sh) = "String" Then Set Sh = Worksheets(Sh)
If Application.CountA(Sh.UsedRange.Cells) = 0 Then
MyIsBlankSht = True
End If
End Function
代碼截圖:
代碼解析:自定義MyIsBlankSht函數包含一個Variant變數類型的參數,代表工作表名稱或者對象名稱。如果指定的工作表為空工作表,則該函數返回True。
1)第2行代碼使用TypeName函數判斷參數Sh是否為字元串類型(「String」),如果是字元串,則將以該字元串作為名稱的工作表賦值給變數Sh。
2)第3行代碼通過工作表函數CountA統計工作表已使用區域的非空單元格個數,如果統計結果為0,則表示該工作表為空工作表。
2 判斷工作表為空表的代碼及代碼講解
我們看看上述自定義函數在實際中的利用:有了上述的自定義函數,現在就可以像使用VBA函數一樣使用自定義的MyIsBlankSht函數,如下面的代碼我們要首先判斷一下某個工作表是否為空,如果為空,那麼刪除它。
Sub mynz_57 ()
Dim Sh As Worksheet
Application.DisplayAlerts = False
i = 1
For Each Sh In ThisWorkbook.Sheets
If MyIsBlankSht(Sh) Then Sh.Delete: MsgBox "刪除" & i & "個工作表了": i = i + 1
Next
Application.DisplayAlerts = True
MsgBox "共刪除" & i - 1 & "個工作表!"
End Sub
代碼截圖:
代碼解析:使用自定義的MyIsBlankSht函數刪除工作簿中所有空工作表。
1)第3行代碼將Application對象的DisplayAlerts屬性設置為False,使刪除時不顯示系統警告對話框。
2)第5行到第7行代碼,使用For Each...Next語句遍歷所有工作表,使用自定義的MyIsBlankSht函數判斷是否為空表,如果為空表則使用Delete方法刪除。
- 注意 自定義MyIsBlankSht函數僅僅判斷工作表單元格區域內容是否為空,如果工作表中存在其它對象(如圖形對象、數據有效性、單元格批註等),不作為判斷的基準。
代碼的運行:
最後會告訴我們共刪除了幾個工作表:
今日內容迴向:
1 如何判斷工作表為空呢?(Application.CountA(Sh.UsedRange.Cells) = 0)
2 如何刪除空白的工作表呢?(Sh.Delete)
本講內容參考程序文件:VBA代碼解決方案(55-60).xlsm
(備註:在測試本講程序之前,原文件務必要做好備份!)
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中:
【分享成果,隨喜正能量】境由心造,物隨心轉。現在的一切不管好壞,終將會過去,與其滿心哀怨、焦慮,不如樂觀一些,坦然的面對一切,讓心中灑滿陽光,驅散一切負面情緒造成的精神內耗,請相信,一切都會好起來的。。