在Visual Basic環境下進行計算時,常常需要臨時存儲數據。例如,可能想要計算幾個值,將它們進行比較,並根據比較的結果對它們進行不同的操作。如果想要比較這些值,就要存儲它們,但不必把它們存入屬性。像大多數編程語言那樣,Visual Basic 使用變量來存儲值。變量具有名字(用來引用該變量所含的值的名詞)和數據類型(確定變量可以存儲的數據的種類)。數組可以用來存儲建立了索引的相關變量集。
常數也存儲數值,顧名思義,在整個應用程序執行過程中,這些值都保持不變。常數的使用增加了代碼的可讀性,因為我們看到的是具有含義的名字而不是數字。Visual Basic 有許多內部常數,但也可以建立自定義常數。
在Visual Basic中,數據類型控制了數據的內部存儲。按照缺省規定,VisualBasic 使用了變體數據類型。在不需要 Variant 提供的靈活性時,還有許多其它可用的數據類型,它們可用來優化代碼的速度和大小。
變量
在Visual Basic中執行應用程序期間,用變量臨時存儲數值。變量具有名字(用來引用變量所包含的值的詞)和數據類型(確定變量能夠存儲的數據的種類)。
可以把變量看作內存中存放未知值的所在處。例如,假定正在為水果鋪編一個銷售蘋果的軟件。在銷售實際發生之前並不知道蘋果的價格和銷量。此時,可以設計兩個變量來保存未知數,將它們命名為 ApplePrice 和ApplesSold。每次運行程序時,用戶就這兩個變量提供具體值。為了計算總的銷售額,並且將結果顯示在名叫 txtSales 的文本框中,代碼應該是這樣的:
txtSales.txt = ApplePrice * ApplesSold
每次根據用戶提供的數值,這個表達式返回不同的金額。由於有了變量,就可以設計一個算式,而不必事先知道實際的輸入是多少。
在這個例子中,ApplePrice 的數據類型是貨幣,而 ApplesSold 的數據類型是整數。變量還可以表示許多其它數值,比如:文本數值、日期、各種數值類型,甚至對象也在此列。
存儲和檢索變量中的數據
用賦值語句進行計算,並將結果賦予變量:
ApplesSold = 10 '將值 10
'傳給變量。
ApplesSold = ApplesSold + 1
'變量值
'增一。
注意,例子中的等號是賦值符,並不是等於操作符;它將數值 (10) 賦予變量 (ApplesSold)。
聲明變量
聲明變量就是事先將變量通知程序。要用Dim語句聲明變量,Dim 語句提供了變量名:
Dim variablename [As type]
在過程內部用Dim語句聲明的變量,只有在該過程執行時才存在。過程一結束,該變量的值也就消失了。此外,過程中的變量值對過程來說是局部的,也就是說,無法在一個過程中訪問另一個過程中的變量。由於這些特點,在不同過程中就可使用相同的變量名,而不必擔心有什麼沖突和意想不到變故。
變量名:
1.必須以字母開頭。
2.不能包含嵌入的(英文)句號或者嵌入的類型聲明字符。
3.不得超過 255 個字符。
4.在同一個范圍內必須是唯一的。范圍就是可以引用變量的變化域,如一個過程、一個窗體等等。
由於Dim語句中的可選的 As type 子句,可以定義被聲明變量的數據類型或對象類型。數據類型定義了變量所存儲信息的類型。String、Integer和Currency 都是數據類型的例子。變量也可以包含來自Visual Basic或其它應用程序的對象。Object、Form1和TextBox 都是Visual Basic對象類型或類的實例。
詳細信息 關於對象的更詳細的信息,請參閱第九章“用對象編程”和第十章“用部件編程”。在本章後面的“數據類型”部分將詳細討論數據類型。聲明變量的其它方式:
不在過程內部,而在窗體、標准或類模塊的聲明段聲明變量,這將使變量對模塊中的所有過程有效。
用Public關鍵字聲明變量,這將使變量在整個應用程序中有效。
用Static關鍵字聲明一個局部變量,那麼,即使過程結束,變量的值也仍然保留著。
隱式聲明
在使用一個變量之前並不必先聲明這個變量。 例如,可以書寫這樣一個函數,在其中就不必在使用變量 TempVal 之前先聲
明它:
Function SafeSqr (num)
TempVal = Abs (num)
SafeSqr = Sqr (TempVal)
End Function
Visual Basic 用這個名字自動創建一個變量,使用這個變量時,可以認為它就是顯式聲明的。雖然這種方法很方便,但是如果把變量名拼錯了的話,會導致一個難以查找的錯誤。例如,假定寫了這樣一個函數:
Function SafeSqr (num)
TempVal = Abs (num)
SafeSqr = Sqr (TemVal)
End Function
乍看起來,這兩段代碼好像是一樣的。但是因為在倒數第二行把 TempVal 變量名寫錯了,所以函數總是返回 0。當Visual Basic遇到新名字,它分辨不出這是意味著隱式聲明了一個新變量呢,還是僅僅把一個現有變量名寫錯了,於是只好用這個名字再創建一個新變量。
顯式聲明
為了避免寫錯變量名引起的麻煩,可以規定,只要遇到一個未經明確聲明就當成變量的名字,Visual Basic 都發出錯誤警告。 要顯式聲明變量,請
在類模塊、窗體模塊或標准模塊的聲明段中加入這個語句:
Option Explicit
-或-
在“工具”菜單中選取“選項”,單擊“編輯器”選項卡,再復選“要求變量聲明”選項。這樣就在任何新模塊中自動插入 Option Explicit 語句,但不會在已經建立起來的模塊中自動插入;所以在工程內部,只能用手工方法向現有模塊添加 Option Explicit。
如果對包含 SafeSqr 函數的窗體或標准模塊執行該語句,那麼 Visual Basic將認定 TempVal 和 TemVal 都是未經聲明變量,並為兩者都發出錯誤信息。隨後就可以顯式聲明 TempVal。
Function SafeSqr (num)
Dim TempVal
TempVal = Abs (num)
SafeSqr = Sqr (TemVal)
End Function
因為Visual Basic對拼錯了的 TemVal 顯示錯誤信息,所以能夠立刻明白是什麼問題。由於 Option Explicit 語句有助於抓住這些類型的錯誤,所以最好在所有代碼中使用它。
注意 Option Explicit 語句的作用范圍僅限於語句所在模塊,所以,對每個需要Visual Basic強制顯式變量聲明的窗體模塊、標准模塊及類模塊,必須將 Option Explicit 語句放在這些模塊的聲明段中。如果選擇“要求變量聲明”,Visual Basic 會在後續的窗體模塊、標准模塊及類模塊中自動插入 Option Explicit,但是不會將它加入到現有代碼中。必須在工程中通過手工將 Option Explicit 語句加到任何現有模塊中。
理解變量的范圍
變量的范圍確定了能夠知曉該變量存在的那部分代碼。在一個過程內部聲明變量時,只有過程內部的代碼才能訪問或改變那個變量的值;它有一個范圍,對該過程來說是局部的。但是,有時需要使用具有更大范圍的變量,例如這樣一個變量,其值對於同一模塊內的所有過程都有效,甚至對於整個應用程序的所有過程都有效。Visual Basic 允許在聲明變量時指定它的范圍。
指定變量的有效范圍
一個變量在劃定范圍時被看作是過程級(局部)變量,還是模塊級變量,這取決於聲明該變量時采用的方式。
過程內部使用的變量
過程級變量只有在聲明它們的過程中才能被識別,它們又稱為局部變量。用Dim或者Static關鍵字來聲明它們。例如:
Dim intTemp As Integer
- 或者 -
Static intPermanent As Integer
在整個應用程序運行時,用Static聲明的局部變量中的值一直存在,而用Dim 聲明的變量只在過程執行期間才存在。
對任何臨時計算來說,局部變量是最佳選擇。例如,可以建立十來個不同的過程,每個過程都包含稱作intTemp的變量。只要每個intTemp都聲明為局部變量,那麼每個過程只識別它自己的intTemp版本。任何一個過程都能夠改變它自己的局部的intTemp變量的值,而不會影響別的過程中的intTemp變量。