VBA空白判定是基本必學技巧,進行資料驗證和報表檢查的時候常常會用到,在此介紹2個判斷儲存格是否有值的語法,同時補充程式開發的偵錯輔助工具。
目錄
Toggle一、儲存格是否有值
範例是一個全新的空白Excel活頁簿,很明顯目前工作表上沒有任何內容,預設的目前儲存格A1也是如此。

二、Debug.Print列印
在Excel開啟VBA編輯器,新增模組,寫入一行程式碼:「Debug.Print ActiveCell.Value」,將目前的儲存格ActiveCell列印出來,從右邊的「即時運算」視窗可以看到是空白,也就是上個步驟所看到的空白儲存格。

三、Excel VBA IsEmpty
文章範例是空白的活頁簿,儲存格空白很正常,但很多時候在報表裡面或者是填寫欄位有空白是不正常,常常有需要進行Excel尋找空格,也就是判斷是否為空白。
有個專門的VBA函數在處理這種狀況:IsEmpty,括號裡面就是要判斷的內容,這裡用到了上個步驟看到的目前儲存格ActiveCell,右邊的執行結果合乎預期,答案是「True」。
這裡為了補充說明,特地用兩行程式碼,一個有Value,另外一個沒有Value,兩者結果相同。這是因為儲存格對象有很多屬性,其中最常用最基本的就是儲存格值,因此當程式只有ActiveCell沒有Value的時候,VBA很聰明,預設就是儲存格值Value這個屬性。

四、Not函數是什麼?
VBA IsEmpty很好用,但它畢竟是程式專有的函數名詞,有時候會忘了,忘了其實沒關係,會寫到VBA的人對於Excel函數至少是略通一二,而只要稍微對公式有點經驗,都知道在公式填入儲存格空白,就是兩個英文雙引號,而在VBA裡面也可以使用這個簡便語法。
在此順便補充一個VBA和Excel共通的函數,名稱相同,作用也相同:Not,它的意思是反真為假,反假為真,顛倒過來就是了,所以:
「ActiveCell = “”」是真。
「Not (ActiveCell = “”)」是假。

五、列出屬性方法
沿用這篇文章範例,順便補充一個編輯器程式碼的輔助工具。將游標移到Debug的地方,上方工具列將「編輯」下拉,選擇清單中的「列出屬性或方法」,快速鍵是「Ctrl+J」,如此會列出Debug」這個對象所有的屬性方法,而這個對象很單純只有兩個方法,一個是先前使用過的「Print「,另一個是「Assert」。

六、VBA空白判定
設計三行程式碼,依照先前步驟的瞭解,第一行結果是「True(真)」,第2行的值應該是假(False),第3行則是真,這三行都是在進行VBA空白判定。
第二行用到上個步驟的Assert方法,執行之後,即時運算視窗列印出第一行的「True」,來到了第2行是假,會跟通常VBA偵測到錯誤一樣暫時停止,最上方訊息列顯示是「中斷」狀態,同時將把第二行標記黃色,在此代表出現錯誤。
其實程式本身語句沒有任何錯誤,從這裡的結果可以知道所謂的「Debug.Assert」是VBA程式偵錯語句,檢驗某個程式表達式的真假值,如果是假的話,它會提示錯誤,並且中斷程式的執行。

七、執行中斷的處理
將上方工具列的「執行」下拉,前三個選項是「執行」、「中斷」、「重新設定」。正常情況下點選「執行Sub或Userform」,或者用快速鍵F5就會啟動VBA Sub程序或表單。可是如果是像上個步驟已經偵測到錯誤的停止狀態,可以選擇「重新設定」,如此會終止原本中斷的程式,回復到一般就緒的狀態。
中斷時如果再按一次F5會嘗試繼續執行看看。通常是要修改程式語句,沒有問題才會繼續往下跑,不過Debug.Assert較為特別,即使沒有修改任何程式,它也會當作已經修改好了一下,於是就像這個步驟截圖那樣,把下一行「True」列印出來,這部份讀者有興趣建議可以自行執行測試。

程式開發的心得分享
這篇文章主要介紹兩個重點。首先是判斷儲存格空白的兩種做法,直接使用VBA函數和沿用Excel公式語法,雖然兩種都可以達到目的,一般而言使用函數較為簡潔而且有效率。
文章第二個重點是Debug.Assert,老實說用到的機會不多。如果是給一般人使用的程式專案,這個檢查會跳到VBA介面不太適合。如果是依照它原本的機制在程式開發階段使用,有很多其他的做法都可以進行偵測,並非一定要使用這個不是很直覺的工具,不過從VBA教學的角度而言還是值得一提。
以上個人心得提供給讀者參考。
完整VBA課程:職場及投資應用,20小時入門進階: