系統性的知識前面已經講完,從本章開始,本系列教程涉及的將會是一些相對凌散的內容。
1. 注釋
代碼注釋是一件利人利己的事,為了方便自己在代碼需要更新修改時,依然能夠快速地看懂自己完的每一行代碼到底是什么意思有何用處,在關鍵點加上代碼注釋是很有必要的。如果要讓別人也能看懂自己的代碼,那么注釋更是不可或缺的。
VBA中有兩種注釋的方法,其一是使用單引號,另一種是Rem。在單引號后面或Rem后面的所有內容,在程序運行時都不會被執行,它們就是注釋的內容。通常注釋的內容會被用其它顏色標識。如下:

有點不方便的是,貌似VBA里面並沒有提供多行注釋的方法,要想把多行代碼注釋掉,只能在每一行前面都加上單引號或者Rem
在程序寫得比較長的時候,就有必要在其中加入注釋。注釋通常應使用於:
- 邏輯復雜的地方
- 調用自定義的函數或過程
- 每個函數和過程的開頭。描述本函數和過程的作用
還有其它一些作者認為應當寫上注釋的地方。每行都注釋肯定是多余的,但不寫注釋,通常也是不對的。什么時候該寫,什么時候不寫,只有要自己用得多了之后,才會清楚。
2. 宏按鈕
前面所講的所有代碼案例,都是在VBE里面執行的(無論是通過單擊運行按鈕還是快捷鍵F5),但這樣明顯是不方便的。一是每次都需要打開VBE甚至要定位到某一個過程中,才可以執行,二是如果不懂VBA操作的人,則完全不知該如何執行了。
在Excel菜單欄-開發工具中,找到“插入”,點擊它可發現有“表單控件”和“ActiveX控件”,這里使用的是第一個,表單控件。它的第一個,就是按鈕。點擊一下這個按鈕,則可以在Excel表格中通過鼠標的拖動來放置一個按鈕對象。如果使用的是表單控件中的按鈕,則在放開鼠標后,會馬上彈出一個指定宏的對話框:

當然這時也可以不指定,點取消即可。后面有需要時,通過右鍵單擊這個按鈕,選擇指定宏也可以達到同樣的效果。

其實理論上來說,VBA中的過程,或者說Excel中的宏,可以指定給Excel中的各種對象實體,比如插入的圖片、各種形狀,甚至在Excel中的生成的圖表,都是可以作為宏執行的載體的。
我通常都通過插入形狀來設置按鈕,因為形狀更加美觀,可以設置它的各種格式,和Excel表格配合更為協調,不影響整體版面。用如下方式插入一個自己喜歡的形狀:

在其中加入提示文字並設置好格式后,就可以右鍵單擊它,選擇“指定宏”來把相應的VBA過程賦給它:

有興趣的朋友,可以嘗試學習使用ActiveX控件。通過鼠標拖放一個ActiveX控件后,右鍵單擊它,查看代碼,留意代碼上方左右兩個對象窗口,點擊右邊的下拉列表可以發現這個控件可以有很多事件,例如單擊、雙擊、鼠標移入、鼠標移出、被選中時等

3. 錯誤處理
當代碼執行出錯時,VBA提供了兩種處理的方式:
- On Error GoTo
- On Error Resume Next
3.1 On Error GoTo
表示如果自本行開始后面的代碼執行出錯,則跳至指定位置繼續執行。如:
Sub te4()
On Error GoTo con
Debug.Print "a" + 3
Debug.Print 8 - 5
con:
Debug.Print "error occur"
End Sub
示例中第2行設置了On Error GoTo con,即當第3行出錯時,就跳到con標記處,執行自con后的代碼。標記后面應加上冒號(:)。第3行中,用雙引號包含的a是一個字符串,而3是一個數字,直接將字符串與數字相加是會出錯的,所以這里會觸發錯誤,第4行不會被執行到,程序會直接跳轉到con處,執行后面的Debug.Print語句。程序輸出error occur。
注意,如果把第3行和第4行交換位置,則程序會先輸出8-5的結果(即3),再輸出error occur。
3.2 On Error Resume Next
表示如果代碼執行出錯,則從出錯代碼的下一行代碼繼續執行。如:
Sub te3()
On Error Resume Next
Debug.Print 5 + 3
Debug.Print "a" + 3
Debug.Print "error occur"
End Sub
代碼第3行執行正常,第4行將出錯,於是直接執行第5行。所以程序的輸出是:
8
error occur
最后要提醒的是,以上提到的兩種錯誤處理的方法應盡量盡量少用。因為有錯誤應該去解決它,而不是跳過它。
作業:
\1. 執行以下代碼,觀察輸出結果,務必結合輸出結果理解代碼的每一行及它的邏輯。
Sub test()
On Error GoTo con
Debug.Print 3 + 3
Debug.Print 5 * 5
con:
Debug.Print "error occur"
Debug.Print "Do you understand this all?"
End Sub
\2. 執行以下代碼,觀察執行結果,務必結合輸出結果以錯誤提示理解代碼的每一行及整個代碼的邏輯。
Sub test1()
On Error GoTo con
On Error GoTo 0
Debug.Print 3 + 3
Debug.Print "c" - 3
Debug.Print 5 + 5
con:
Debug.Print "error occur"
Debug.Print "Do you understand this all?"
End Sub
本系列教程其它文章
Excel VBA 入門(零)
Excel VBA 入門(一)數據類型
Excel VBA 入門(二)數組和字典
Excel VBA 入門(三) 流程控制1-條件選擇
Excel VBA 入門(四)流程控制2-循環控制
Excel VBA 入門(五)Excel對象操作
Excel VBA 入門(六)過程和函數
Excel VBA 入門(七)注釋、宏按鈕及錯誤處理
Excel VBA 入門(八)單元格邊框
Excel VBA 入門(九)操作工作薄
Excel VBA 入門(十)用戶窗體開發
