VBA判斷工作表是否為空,符合後刪除

2022年12月14日09:07:03 科技 1839

【分享成果,隨喜正能量】人一輩子都輸在一個等字,等不忙,等下次,等有時間,等有條件,人生最經不起等待,醒醒吧,別等老了才明白……。

《VBA代碼解決方案》(10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位於入門後的提高,在學習這套教程過程中,側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一下把自己喜歡的代碼擺好。

這套教程共三冊,一百四十七講,內容覆蓋較廣,也是初級和中級間的過度教程,改版後的內容主要是提供程序源碼文件及代碼修正為32位和64位兼用代碼。今後一段時間會給大家陸續推出。今日的內容是第57講:VBA判斷工作表是否為空,符合後刪除

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

代碼截圖:

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

代碼解析:自定義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

代碼截圖:

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

代碼解析:使用自定義的MyIsBlankSht函數刪除工作簿中所有空工作表。

1)第3行代碼將Application對象的DisplayAlerts屬性設置為False,使刪除時不顯示系統警告對話框。

2)第5行到第7行代碼,使用For Each...Next語句遍歷所有工作表,使用自定義的MyIsBlankSht函數判斷是否為空表,如果為空表則使用Delete方法刪除。

  • 注意 自定義MyIsBlankSht函數僅僅判斷工作表單元格區域內容是否為空,如果工作表中存在其它對象(如圖形對象、數據有效性、單元格批註等),不作為判斷的基準。

代碼的運行:

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

最後會告訴我們共刪除了幾個工作表:

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

今日內容迴向:

1 如何判斷工作表為空呢?(Application.CountA(Sh.UsedRange.Cells) = 0

2 如何刪除空白的工作表呢?(Sh.Delete

本講內容參考程序文件:VBA代碼解決方案(55-60).xlsm

(備註:在測試本講程序之前,原文件務必要做好備份!)

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中:

VBA判斷工作表是否為空,符合後刪除 - 天天要聞

【分享成果,隨喜正能量】境由心造,物隨心轉。現在的一切不管好壞,終將會過去,與其滿心哀怨、焦慮,不如樂觀一些,坦然的面對一切,讓心中灑滿陽光,驅散一切負面情緒造成的精神內耗,請相信,一切都會好起來的。。

科技分類資訊推薦

引領科技豪華MPV新風尚 第二代騰勢D9西安車展亮相 - 天天要聞

引領科技豪華MPV新風尚 第二代騰勢D9西安車展亮相

兼具宜商氣度與家用溫情的科技豪華旗艦MPV,第二代騰勢D9迎來西安地區正式亮相。新車依託全球新能源MPV冠軍底蘊,以第二代刀片電池、雙閥雲輦-C、天神之眼5.0智駕等核心技術全面升級,兼顧商務體面與家庭舒適,為西北高端用戶帶來一站式全能出行解決方案。
採購禁入!科華數據材料造假被拒門外 - 天天要聞

採購禁入!科華數據材料造假被拒門外

本報(chinatimes.net.cn)記者胡雅文 北京報道這家趕上AI算力風口的公司,因投標材料造假,被相關採購方列入禁入名單兩年,其此前提出的複議申請也被正式駁回。相關採購平台近日發布公告,明確駁回科華數據股份有限公司(下稱“科華數據”,002335.SZ)此前提交的複議申請。早在一年前,科華數據已被認定在“信息通信樞紐...
快評樂道L80:15萬元級買大五座,這波值得沖? - 天天要聞

快評樂道L80:15萬元級買大五座,這波值得沖?

日前,樂道L80正式發布並開啟預售,其整車購買預售價為24.58萬元起,租電購買預售價則低至15.98萬元起。面對大型SUV市場“細分再細分”之競爭趨勢,這款樂道年度重磅新車都有哪些優勢?又能否成為“大五座SUV革新之作”?下面,圈哥就帶大家全方位感受。
成都直擊凱威德:純電全尺寸SUV的張揚與大氣 - 天天要聞

成都直擊凱威德:純電全尺寸SUV的張揚與大氣

4月22日,凱迪拉克以奧斯卡級盛典規格,將上海保利大劇院點亮為璀璨舞台,在品牌代言人倪妮與全場嘉賓的共同見證下,凱迪拉克全尺寸純電公路旗艦——凱威德耀然上市。新車共推出長續航四驅Pro、高性能四驅Ultra兩款配置,官方售價區間為46.88萬-50.88萬元。