在編寫程序時(shí),少不了要使用變量和常量,它們都是程序中很重要的元素,是組織程序的基礎(chǔ)。
一個(gè)示例
下面是一個(gè)簡(jiǎn)單的VBA程序,用來計(jì)算半徑為5的圓的面積。
Sub 示例2()
Const PI = 3.1415926
Dim r As Integer
Dim area As Double
r = 5
‘ 計(jì)算半徑為5的圓的面積
area = PI * r * r
End Sub
其中,r和area就是變量,PI就是常量。
什么是變量
變量就是在計(jì)算機(jī)中根據(jù)其數(shù)據(jù)類型預(yù)先占用一個(gè)位置,在這個(gè)位置里可以放置相應(yīng)的數(shù)據(jù)。換句話說,我們要在計(jì)算機(jī)中保存數(shù)據(jù),就要有相應(yīng)的空間,變量就是用來指明這些空間的。
我們可以將值存儲(chǔ)在變量中,供程序使用,如下圖1所示。
圖1
注意,如果將另一個(gè)值放入已經(jīng)存在值的變量中,那么原值就被新值所取代。
命名變量
在程序中,我們經(jīng)常會(huì)使用多個(gè)變量。這樣,就需要給變量起不同的名字,以區(qū)分這些變量,例如圖1中的r就是一個(gè)變量的名字。
VBA規(guī)定了變量名的命名規(guī)則:
可以使用字母、數(shù)字和下劃線,但必須以字母開頭。
變量名最長(zhǎng)不可以超過255個(gè)字符。
變量名不區(qū)分大小寫。
變量名不能與VBA保留字同名,不能與VBA中的函數(shù)、語句和方法同名。
變量名中不能使用空格和句點(diǎn)。
這就說明,我們?cè)诿兞棵Q時(shí):
不能以數(shù)字或下劃線開頭。
不能在變量名中使用特殊類型的聲明字符(#、$、%、&或!)。
不能在變量名中使用運(yùn)算符(+、-、*、/、<、>、、.、,、:)。
下列字符也不能使用(?、=、”、;、`、@、^)。
在同一作用域內(nèi)不能有相同的名字。
變量的數(shù)據(jù)類型
在前一篇中,我們過程序中的各種數(shù)據(jù)都有自已的數(shù)據(jù)類型(例如整型、字符串型、布爾型等),變量也有自已的數(shù)據(jù)類型。
在定義變量時(shí),通常要說明變量要存儲(chǔ)什么數(shù)據(jù)類型的值。也就是說,創(chuàng)建變量后,也決定了存儲(chǔ)在該變量中的值的數(shù)據(jù)類型。
例如,上面示例中的:
Dim r As Integer
Dim area As Double
定義變量時(shí),指定變量r存放Integer型的數(shù)據(jù),而變量area存放Double型的數(shù)據(jù)。
說明:與很多編程語言不同,VBA比較特殊,它在定義變量時(shí),并不一定需要聲明存儲(chǔ)在變量中的數(shù)據(jù)類型。VBA可以自動(dòng)處理運(yùn)用數(shù)據(jù)時(shí)涉及到的細(xì)節(jié),這對(duì)程序編寫來說的確很省事,但你會(huì)發(fā)現(xiàn),這樣的程序執(zhí)行的速度會(huì)更慢,使用內(nèi)存的效率也不高。如果我們?cè)诙x變量時(shí)嚴(yán)格指明該變量的數(shù)據(jù)類型,那么不僅能有效利用計(jì)算機(jī)空間,并且該變量在進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換時(shí),計(jì)算機(jī)會(huì)自動(dòng)告訴你發(fā)生的問題。
聲明變量
如上所述,示例中已經(jīng)給出了聲明變量的方法,即使用Dim語句來對(duì)變量進(jìn)行聲明(或定義)。聲明變量的一般語法結(jié)構(gòu)是:
圖2
當(dāng)然,還可以使用Public來聲明一個(gè)公有變量。正如前面所說的,你可以省略掉As及之后的數(shù)據(jù)類型來聲明變量,讓VBA自已處理數(shù)據(jù),但這并不會(huì)帶來多少好處。
確切地說,當(dāng)省略數(shù)據(jù)類型時(shí),VBA會(huì)使用默認(rèn)的數(shù)據(jù)類型Variant,在程序處理過程中,會(huì)根據(jù)所處理內(nèi)容來改變變量的數(shù)據(jù)類型。
說明:VBA中“古老的”聲明變量的方法
VBA也延續(xù)了BASIC定義變量數(shù)據(jù)類型的方法,即將一個(gè)字符加到變量名稱后面來指定變量的數(shù)據(jù)類型,例如:
Dim r%
將變量r聲明為整型。下表列出了有類型聲明字符的VBA數(shù)據(jù)類型。
數(shù)據(jù)類型類型聲明字符
Integer(整型)%
Long(長(zhǎng)整型)&
Single(單精度浮點(diǎn)型)!
Double(雙精度浮點(diǎn)型)#
Currency(貨幣型)@
String(字符串型)$
常量
在程序中,如果我們處理的某些數(shù)據(jù)從不會(huì)改變,那么我們可以將它們定義成常量,即決不會(huì)發(fā)生改變的數(shù)值或字符串。
聲明常量
VBA規(guī)定使用Const語句來聲明常量。例如本文開頭示例中的:
Const PI = 3.1415926
定義了一個(gè)名為PI的常量,它的值是3.1415926,在程序中使用該常量,其值不會(huì)發(fā)生變化。我們沒有指明PI的數(shù)據(jù)類型,VBA會(huì)根據(jù)它的值確定數(shù)據(jù)類型,PI的數(shù)據(jù)類型是Double型。當(dāng)然,我們可以在聲明的同時(shí)明確指定常量的數(shù)據(jù)類型:
Const PI As Double = 3.1415926
定義了常量之后,如果要在程序中修改它的值,例如給常量賦新值,將會(huì)產(chǎn)生錯(cuò)誤。和變量一樣,也可以在前面添加Public來聲明一個(gè)公有常量。
說明:聲明常量的好處
在程序中,將多處使用的值聲明為常量,至少有兩大好處:
如果要修改值,只需手動(dòng)修改常量定義即可,不必到多個(gè)地方修改同一值,不僅繁鎖,也容易遺漏。
給常量起一個(gè)好的名字,能夠清楚地表明其意圖,讓代碼更具可讀性。
除了我們定義的常量外,VBA還提供了很多預(yù)定義的常量,這些常量不用明確聲明就可使用。VBA預(yù)定義的常量通常以“xl”或“vb”開頭。