天天看點

VB命名規則及代碼規範1.       VBA 命名規則 2.       VBA 代碼規範

VBA 命名規則及代碼規範

馬維峰 ([email protected] )

1.       VBA 命名規則

一個好的命名規則可以提高程式的可讀性,減少錯誤發生的機率,命名規則不是一定的,不同的人有不同的規則和習慣,但在程式設計過程中,對于個人或工作組,一定要遵守相同的命名規則。

1.1.       變量、常量、自定義類型和枚舉

表 1 ‑1 概括了變量、常量的基本命名規則。

表 1 ‑ 1 變量、常量和枚舉類型的命名規則

元素 命名規則
變量 < 範圍 >< 數組 >< 資料類型 > 描述(首字母大寫)
常量 < 範圍 >< 資料類型 > 描述(全部大寫)
使用者自定義類型

Type 描述名稱

    < 資料類型 > 描述

End Type

枚舉類型

Enum < 工程字首 > 一般描述

    < 工程字首 >< 一般描述 >< 具體名稱 1>

    < 工程字首 >< 一般描述 >< 具體名稱 2>

End Enum

< 範圍 > 表示了變量的作用域,對于 Private 類型和子產品級變量,一般使用“ m ”字首表示,對于 Public 類型的變量,一般使用“ g ”字首表示,而對于過程内的局部變量,則不使用字首。如果是數組,在範圍字首後增加“ a ”表示變量為數組。

對于資料類型,一般使用 表 1 ‑2 的字首表示。

表 1 ‑ 2 命名規則常用字首

字首 資料類型 字首 資料類型 字首 資料類型
is Boolean cm ADODB.Command cmb MSForms.ComboBox
byt Byte cn ADODB.Connection chk MSForms.CheckBox
cur Currency rs ADODB.Recordset cmd MSForms.CommandButton
dte Date fra MSForms.Frame
dec Decimal cht Excel.Chart lbl MSForms.Label
f Double , Single rng Excel.Range lst MSForms.ListBox
i Integer , Long wb Excel.Workbook mpg MSForms.MultiPage
obj Object ws Excel.Worksheet opt MSForms.OptionButton
str String spn MSForms.SpinButton
u User-defined type cbr Office.CommandBar txt MSForms.TextBox
v Variant ctl Office.CommandBarControl ref RefEdit Control
col VBA.Collection cls 自定義類 frm 使用者窗體

變量的描述部分最好使用有意義的字元串,使用 1-2 個英文單詞表示,首字母大寫,例如“ strUserName ”、“ iPeopleAge ”。除了循環變量使用 i 、 j ,臨時變量使用 tmp 之類的變量外,不要使用太短的命名,但也不要使用太長不易記憶的名稱。

常量則一般使用全部大寫的方式,以與變量差別。

對于枚舉類型,整個工程一定要使用一緻的規則,每個枚舉常量都包含工程字首,變量字首和本身描述幾部分,例如:

Private Enum schDayType

    schDayTypeUnscheduled

    schDayTypeProduction

    schDayTypeDownTime

    schDayTypeHoliday

End Enum

1.2.       過程和函數

過程和函數命名一般使用“名詞 + 動詞”的方式,首字母大寫,也可以使用“動詞 + 名詞”方式,對于過程和函數的參數,命名方式見前,為了和局部變量差別,可以不使用表示參數變量類型的字首。例如,我們可以命名如下的過程:

GetUserName(id as long) As String

1.3.       子產品、類子產品和使用者窗體

子產品使用類似過程的命名,用幾個表示其用途的首字母大寫的短語來表示,例如“ PlotChartTools ”;類子產品增加字首“ C ”,以與标準子產品相差別,例如“ CIniTools ”、“ CEmployee ”等;使用者窗體則以“ frm ”為字首,如“ frmAbout ”、“ frmRegTools ”。這樣,在代碼中我們可以這樣使用類子產品:

Dim clsMyClass As CMyClass

Set clsMyClass = New CMyClass

類子產品與其對象差别一目了然。由于 VBA 對于窗體可以使用預設窗體,不需要建立執行個體,在代碼中可以直接使用,是以,使用了與變量定義一樣的字首。例如:

frmRegTools.Show

1.4.       VBA 工程

VBA 工程一般使用與其檔案名同名的名字,一方面,當打開幾個工程的時候可以友善的區分工程,另一方面,在工程之間引用的時候,需要不同的名稱。

2.       VBA 代碼規範

代碼規範表示了如何定義變量、過程、函數(見前),如何組織 代碼,控制縮進,添加注釋等内容。代碼規範的目的在于産生一緻的代碼,提高代碼的可讀性,使其易于修改和交流。以下規範并非必須遵守,當使用規範破壞了代 碼的可讀性,那麼就沒有必要遵從代碼規範了,這種情況需要自行判斷。

2.1.       代碼的排版

縮進

一般來說,代碼的縮進應該為 4 個空格,在 VBA IDE 中選中自動縮進,并設定為 4 個字元。一個過程的語句要比過程名稱縮進 4 個空格,在循環,判斷語句、 With 語句之後也要縮進。例如:

If strText = " " Then

       NoZeroLengthString = Null

Else

      NoZeroLengthString = strText

End If

行的長度

一行代碼盡量不要過長,對于大多數程式設計規範,建議一行代碼的最大長度為 80 個字元,在 VBA 中,可以使用續行賦“ - ”将長的代碼行分為數行,後續行應該縮進以表示與前行的關系。例如:

AverageValue = TotalValue / _

    Worksheet(1).Range( ″ A1:A1000 ″ ).Rows.Count

空行

一個子產品内部,過程之間要使用空行隔開,子產品的變量定義和過程之間也應該空 1 行。過程内部,變量定義和代碼應該空 1 行。在一組操作和另一組操作之間也應該空 1 行顯示其邏輯關系。空行可以很好的提高程式的可讀性,但同時,空行沒有必須遵守的規則,其使用的目的就是要顯示程式的邏輯關系。

不要将多個語句放在同一行上

雖然 VBA 允許将多條語句放在一行,但不推薦這麼做。

2.2.       注釋

書寫程式的同時,應該同時對關鍵代碼,子產品,過程增加注釋,更改程式的同時,必須同時更改注釋。必須時刻保證注釋與程式代碼一緻,否則還不如不加注釋。對于簡短的注釋,不需要加句号,否則應該增加句号,組成段落。

如果可能,建議盡量使用英文書寫注釋,因為這樣會帶來交流的便利,特别是在正式的開發中。

區塊注釋

區塊注釋通常描述其下的部分或全部代碼,例如子產品說明或者過程說明。其縮進要和它所描述的代碼一緻。子產品的注釋應該位于子產品的所有代碼之前, Option 語句之後,過程的注釋位于過程定義之後,并保證縮進一緻。對于子產品的注釋,注釋結束後應該有一空行,其前後可以加一些修飾以差別與其他注釋,而過程注釋則不需要。例如:

#001 Option Explicit

#002

#003 '***************************************************

#004 ' 主程式子產品,提供按鈕調用,對話框彈出等服務

#005 '***************************************************

#006

#007 Public Const strVer As String = "0.31"

#008

#009 Public Sub GeoDrawMain()

#010 ' 主程式子產品,單擊按鈕後彈出

#011     frmMain.Show vbModal

#012 End Sub

行内注釋

行内注釋的形式是在語句的同一行中加注釋,行内注釋應該簡單明了,并不要描述顯而易見的事情。行内注釋和語句至少應該有 2 個以上空格。可以在語句和注釋之間使用多個 Tab 使注釋對齊,例如:

Dim iAge As Long            ‘ 年齡

Dim strName As String       ‘ 姓名

2.3.       程式版本

建議在子產品注釋中包括作者,修改時間,版本等資訊,例如:

' 子產品名稱:氣壓計算子產品

' 描述: …

' 作者: Mars

' 建立時間: 2004 年 4 月 23 日

' 修改時間: 2005 年 7 月 13 日

' 版本: 2.5

此類注釋應該形成自己的風格,在所有的工程中保持一緻。對于團隊工作和正式開發,應該嚴格要求在子產品注釋中包括這些内容。

2.4.       一些基本原則

明确說明作用範圍

在代碼中,對于子產品級的變量,過程,函數,應該總是使用“ Public ”、“ Private ”等關鍵字明确說明其範圍。

使用有意義的名稱

一定要使用有意義的名稱,而不要使用簡單的 A 、 B 、 C 之類的名稱(循環變量約定俗成使用 i 、 j 等名稱除外)。

明确參數和變量的資料類型

在定義過程參數的時候,一定要明确指定其資料類型和傳遞方式( ByRef 或者 ByVal ),這不僅僅是考慮效率,而是為了友善對這些過程的使用。對于變量定義,也應該養成明确說明其資料類型的習慣。

子產品内的過程排序

子產品内部的過程應該按照“ Public ”、“ Private ”的順序排序,公有的過程在前,私有在後;然後再按照過程名稱字母順序排序。

使用常量和枚舉

應該盡量使用常量和枚舉,而不要在程式代碼中使用數字(幻數)。

語句的選擇

對于 True 、 False 的判斷,使用 If 語句,對于多種可能的判斷,使用 Select 語句。對于循環,對于确定循環次數的循環,使用 For 語句,對于不确定循環次數的循環,使用 Do While 語句,盡量對集合使用 For Each 語句。

Goto 語句

除了錯誤處理,不要使用 Goto 語句。

繼續閱讀