摘 要: 基于Microsoft Office系列辦公軟件中內嵌的VBA語言,本文作者針對其語法規則中的變量聲明規則進行了論述,重點介紹了顯式聲明和隱式聲明的用法,并對兩種聲明方式進行了對比,提出了程序開發中應注意的問題。
關鍵詞: VBA 變量聲明 顯式聲明 隱式聲明
VBA(Visual Basic for Applications)是應用程序開發語言Visual Basic的子集,內嵌在微軟公司常用辦公軟件Microsoft Office中。做為新一代標準宏語言,VBA提供了面向對象的程序設計方法和相當完整的程序設計語言。
VBA易于學習掌握,可以使用宏記錄器記錄用戶的各種操作并轉換為VBA程序代碼。這樣用戶可以很容易地將日常工作轉換為VBA程序,使工作自動化。因此,對于在工作中需要經常使用Office套裝軟件的用戶,學用VBA有助于使工作自動化,提高工作效率。另外,VBA可以直接應用Office套裝軟件的各項強大功能,所以對于程序設計人員的程序設計和開發更加方便快捷。
VBA可以借助于宏記錄器完成開發,實現預定的自動功能,所以許多初次接觸VBA的人員往往對VBA本身的語法規則不那么重視。當需要完成一些較為復雜的功能或對錄制完成的代碼進行維護時候就會產生困難。所以,使用VBA必須要對VBA的語法、對象、事件、代碼規則等基本知識有所了解。本文選取VBA語法規則中的最基礎部分——變量聲明進行簡單地論述。
1.VBA中變量的概念及命名規則
變量是指在程序的運行過程中隨時可以發生變化的量。
變量是程序中數據的臨時存放場所。在代碼中可以只使用一個變量,也可以使用多個變量,變量中可以存放單詞、數值、日期,以及屬性。在使用中,變量可以保存程序運行時用戶輸入的數據、特定運算的結果,以及要在窗體上顯示的一段數據,等等。簡而言之,變量是用于跟蹤幾乎所有類型信息的簡單工具。
在VBA中,每一變量都有變量名。變量名必須以字母字符開頭,不能是VBA中的保留字(關鍵字),在同一范圍內必須是唯一的,不能超過 255 個字符,而且中間不能包含句點或類型聲明字符。
在VBA中使用變量的時候還需要注意一些問題。
1.1變量名在VBA中是不區分大小寫的(如ABC、abc、Abc等都是一樣的)。
1.2定義和使用變量時,通常把變量名定義為容易使用閱讀和能夠描述所含數據用處的名稱,而不要使用一些難懂的縮寫如A或B2等。
1.3根據需要混合使用大小寫字母和數字。
1.4通常每個變量名以兩個或三個字符縮寫開始,這些字符縮寫對應于變量要存儲數據的數據類型。例如,使用strName來說明Name變量保存字符串型數據。
2.VBA中變量聲明的概念
變量在使用前,必須在代碼中進行聲明,即創建該變量。
變量聲明的作用是告訴編譯器在程序中使用了哪些變量,這些變量的數據類型和長度。這是因為在編譯程序執行代碼之前編譯器需要知道如何給語句變量開辟存儲區,這樣可以優化程序的執行。
3.VBA中變量聲明的方式
VBA中聲明變量有兩種方式:顯式聲明、隱式聲明。
顯式聲明:用聲明語句創建變量。下例就是在程序中聲明一個整型變量intIndex:
dim intIndex as integer。
隱式聲明:變量可以不經聲明直接使用,此時VBA給該變量賦予缺省的類型和值。這種方式比較簡單方便,在程序代碼中可以隨時命名并使用變量,但不易檢查。
4.VBA中顯式聲明變量
顯式聲明變量是在使用該變量之前,調用聲明語句對該變量進行聲明。顯式聲明的語法為:
聲明語句 變量名[,變量名2,變量名3 ……][as 數據類型]
4.1 聲明語句
VBA中的聲明語句包括Dim、Static、Public、Private。
4.1.1 使用 Public 語句可以聲明公共模塊級別變量(公有變量)
Public strName As String.
公有變量可用于工程中的任何過程。如果公有變量是聲明于標準模塊或是類模塊中,則它也可以被任何引用到此公有變量所屬工程的工程中使用。
4.1.2 使用 Private 語句可以聲明私有的模塊級別變量(私有變量)
Private strName As String.
私有變量只可使用于同一模塊中的過程。
4.1.3 使用Dim語句同樣可以聲明私有的模塊級別變量(私有變量)
Dim strName As String.
在模塊級別中使用 Dim 語句與使用 Private 語句是相同的,不過使用 Private 語句可以更容易地讀取和解釋代碼。
4.1.4 使用 Static 語句所聲明的變量在調用時仍保留它原先的值。
Static strName As String.
4.2 變量的數據類型
在VBA中,變量可以聲明成下列數據類型中的一種:Boolean、Byte、Integer、Long、Currency、Single、Double、Date、String(變長字符串)、String * length(定長字符串,*代表字符串長度)、Object 或 Variant。如果未指定數據類型,則變量被賦予缺省的Variant 數據類型。另外也可以使用 Type 語句來創建用戶定義類型。
4.3 變量的作用范圍
在顯式聲明中,根據聲明語句的不同,變量具有不同的作用范圍。在過程中定義的變量對于這個過程是專用的,它的作用范圍就是該過程。過程級變量只有在聲明它們的過程中才能被識別,在該過程之外不能訪問,所以在一個過程中不可以使用Public語句聲明一個公有變量;在模塊中定義的變量則有私有和公有兩種,使用Dim和Private語句聲明的變量的作用范圍是該模塊,該模塊中的所有過程都可以調用這些變量,而使用Public語句聲明的變量其作用范圍是工程內所有模塊,當前模塊所屬過程內的所有模塊都可以調用這些變量。
4.4 同時聲明多個變量
在顯式聲明中,可以在一個語句中聲明幾個變量。而為了指定數據類型,必須將每一個變量的數據類型包含進來。在下面的語句中,變量 intX、intY與 intZ 被聲明為Integer 類型。
Dim intX As Integer,intY As Integer,intZ As Integer.
在下面的語句中,變量 intX 與 intY 被聲明為 Variant 類型 ;只有 intZ 被聲明為 Integer 類型。
Dim intX,intY,intZ As Integer.
在聲明語句中,不一定要提供變量的數據類型。若省略了數據類型,則會將變量設成 Variant 類型。
5.VBA中隱式聲明變量
VBA中,變量可以不經聲明直接使用,此時VB給該變量賦予缺省的類型和值。這稱為隱式聲明。變量的隱式聲明方法有三種。
5.1 在使用之前不聲明變量,程序運行中遇到未作聲明的變量名時,它就臨時生成新的變量,分配內存地址。新變量的類型為Variant類型的變量,可以放置所有其他類型的數據。Visual Basic根據變量被賦予的數值來調整變量類型。例如:
VarTemp1=“中華人民共和國” ’變量VarTemp1在賦值時自動成為字符串型變量
VarTemp2=300 ’變量VarTemp2在賦值時自動成為整數型
5.2 可以省略聲明語句而用變量類型聲明字符生成確定類型的變量。在程序執行時,生成有確定類型的變量。可以用TypeName( )函數返回變量的類型以驗證變量到底是何種數據類型。變量類型聲明字符包括:
“%”表示integer類型;
“!”表示single類型;
“”表示 Long類型;
“#”表示 Double類型;
“$”表示 String類型;
“@”表示Currency類型。
5.3 第三種變量隱式定義方法是,用DefXXX語句聲明變量,其中“XXX”部分是VBA的數據類型名稱保留字。這種方式定義的變量只對它所在的模塊起作用。示例:
DefInt A-K ’將名稱以 A 至 K 開頭變量的缺省數據類型設為 Integer 類型。
DefStr L-Z ’將名稱以 L 至 Z 開頭變量的缺省數據類型設為 String 類型。
6.顯式聲明和隱式聲明方法的對比
顯式聲明使用中需要對變量的作用范圍、數據類型等進行明確定義,大大提高了程序的易讀性;隱式聲明使用方便,代碼量少,但是開發過程中如果產生命名沖突和拼寫錯誤等,由于程序運行過程中不能檢查出錯誤,其執行結果就不能達到預期的效果,而且這種錯誤不能利用編譯系統檢查出來,較難查找,特別是在大型復雜的程序中更是如此。因此,要養成在使用一個變量之前先聲明它(即顯式聲明)的良好的編程習慣。
在VBA中,如果不想使 Visual Basic 生成隱含聲明,可以將 Option Explicit 語句放置于模塊中所有的過程之前。這一語句在模塊級別中使用,強制顯式聲明模塊中的所有變量。如果模塊包含 Option Explicit 語句,則當 Visual Basic 遇到一個先前未定界的變量或拼寫錯誤,它會發生編譯時間的錯誤。
本文主要介紹VBA中的變量聲明方法。首先對涉及的變量、變量聲明等概念進行了論述。在此基礎上本文詳細敘述了聲明變量的兩種方式,以及相關的變量數據類型、變量作用范圍進行了闡述,最后對兩種聲明方式的特點進行了對比。通過研究我們可以發現,在實際的VBA開發中,變量聲明可以說是一切程序運行的基礎,開發人員選擇合適的聲明方式,養成良好的使用習慣,對程序開發有著極為重要的意義。
參考文獻:
[1]Microsoft Visual Basic6.0循序漸進教程專業版[M].
[2]劉曜.VBA變量、對話框及自定義函數[J].中國會計電算化,2002,(12).
[3]喻革武.EXCEL中VBA編程語言的命令介紹及編程[J].電腦學習,2001,(04).
[4]楊強強,顧雅娟.VBA在EXCEL中的應用[J].船舶,1999,(03).