VBA命名規范及代碼規范


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語句


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM