Excel VBA教程 0004

變量

變量是指在程序運行過程中其值可以改變的量。變量相當於一個儲存數值的容器,它對應計算機內存中的一個存儲單元(或存儲區城)。變量在使用前首先聲明,聲明變量的作用就是要系統為其分配存儲單元。變量聲明後,每個變量就擁有一個名字,並具有種數據類型。變量的名字在其範圍內可難識別, 也就說在定範圍內變量不能重名。 在程序中是通過名字來引用變量,面數據類型決定了變量的存儲方式。

1、變量命名

實際上可以給變量指定任何名字,英文、中文甚至希臘字符都可以,但是通常還是以英文字符命名。在聲明變量時,必須遵守以下事項:

●變量名必須以字符開頭,長度最大為255。

●變量名只使由字母、數字和下劃線組成,不能含有小數點,空格等字符。

●變量名不能使用VBA的關鍵字(也稱為保留字,如事件名、語句名和通數名等)。因為關鍵字具有特殊的意義。

通常使用Dim語句來聲明變量。它的語法形式如下:

Dim strName As String

這個語句聲明瞭名字為strName的字符串變量,名字中的前綴str表示變瓜的數據類型為字符型。這是在程序中一種比較好的命名規則,但不是必須的規則。

可以在一個語句中聲明幾個變量。而為了指定數據類型,必須將每一個變量的數據類型包含進來。在下面的語句中,變量intX、intY 與intZ被聲明為Integer類型:

Dim intX As Integer, intY As Integer, intZ As Integer

Dim intX, intY, inZ As Integer

則變量intX與intY被聲明為Variant類型:只有intZ被聲明為Integer類型。在這一點十分容易產生錯誤的認識,請大家注意。

Dim sh As WorkSheet

Set sh = Worksheets.Add

使用Set語句將sh指向新創建的工作表。這條語句的作用即sh成為所創建的工作表的快捷引用。

VBA中允許不加聲明就直接使用變量,此時默認的變量類型為變體型。由於前面所指出的原因,這不是一個好的編程習慣,應儘量避免。

為了避免隱式聲明,VBA提供了強制顯示聲明變量的功能。具體方法是在VBE編輯器中,點擊【工具】→【選項】→【要求變量聲明】→【確定】,如下圖

Excel VBA教程 0004

設置了“要求變量聲明”後,在模塊窗口中,將會增加一條Option Explicit語句,如下圖,其作用就是強制聲明變量。

Excel VBA教程 0004

沒有聲明的變量,VBA認為是語法錯誤的,將給出提示。當然也可以手工輸入這條語句。使用Option Explicit語句是一種好的編程習慣。 可以避免沒有聲明變量而直接使用變量帶來的程序調試的複雜性。

5、變量的作用城

變量的作用域是指變量的有效的範圍。

在一個過程中聲明的變量只能在過程中使用,也就是隻能在過程中有效,這種變量具有過程級作用域。因此可以在不同的過程中聲明具有相同名稱的變量。

如果是在一個模塊中聲明的變量,則能在該模塊的各個過程都有效,這種變量具有模塊級的作用域。但是離開了這個過程該變量就無效了.模塊級變量是在模塊的通用聲明段用Dim或Private聲明的。

如果一個變量可以應用到程序的任何個模塊或任何一個窗體中, 這樣的變量稱為全局變量。全局變量是在模塊的通用聲明段用Public語句來聲明的。

6、變量的生存週期

變量的生存週期是變量能夠保存其值的時間。根據變量的生存週期可以將變量分為普通變量和靜態變量。為了便於與靜態變量對比,普通變量稱為動態變量,可能更為恰當。

在程序運行進入變量所在的過程時,才分配該變量內存單元。當退出該過程時,該變量佔用的內存單元自動釋放,其值消失。當再次進入該過程時,所有的動態變量重新初始化。這樣的變量稱為動態變量。使用Dim語句聲明的變量屬於動態變量。

靜態變量是指程序運行進入該變量所在的過程,即使退出該過程後,其值仍被保留,即變量所佔的內存單元不被釋放。當以後再次進入該過程時,原來的變且值可以繼續使用。

如果把普通變量比作一年生的草本植物,在退出過程或者退出模塊後,失去作用,如同草本植物的死亡。那麼靜態變量則相當於多年生的木本植物,在退出過程或模塊後,仍然不死而有效。

使用Static語句來說明靜態變量。如下面語句聲明瞭一個整型的靜態變量S:

Static s As Integer

例子:比較靜態變量和普通 (動態) 變量的運行結果。

Sub 靜態變量()

Static AA As Integer

AA= AA+ 1

Debug.Print AA

End Sub

Sub 動態變量()

Dim AA As Integer

AA= AA+ 1

Debug.Print AA;

End Sub

Excel VBA教程 0004

對於普通變量過程,每次運行過程時,在立即窗口中總是打印1。對於靜態變量過程,每運行一次,在立即窗口中總是顯示變量AA的累加值。

備註:為了每一次的運行不被覆蓋,在Debug.Print AA;語句的最後加上了分號,這樣下一次運行結果將在同一行分開顯示。


分享到:


相關文章: