VBA變量賦值

2024-07-30 11:50 更新

既然你已經(jīng)知道如何命名和聲明變量了,是時候開始使用它們了。我們以學習如何創(chuàng)建變量開始。在VB中,你可以在你程序的任何地方創(chuàng)建變量,只有給它賦個值就行。


1.  打開一個新工作簿并且保存為Chap03.xls
2.  激活VB編輯器窗口
3.  在工程瀏覽器窗口,選擇這個新的工程并在屬性窗口里將它的名稱改為Chap03
4.  選擇“插入”-“模塊”在工程Chap03里面添加一個新模塊
5.  在屬性窗口將該模塊名Module1改為Variables

6.  在代碼窗口,輸入CalcCost過程,如下面所示。這個過程基于下述假設(shè)來計算購買一個計算器的價錢:計算器的價格為35美元,銷售稅為8.5%


Sub CalcCost()
            slsPrice = 35
            slsTax = 0.085
            Range("A1").Formula = "The cost of calculator"
            Range("A4").Formula = "Price"
            Range("B4").Formula = slsPrice
            Range("A5").Formula = "Sales Tax"
            Range("A6").Formula = "Cost"
            Range("B5").Formula = slsPrice * slsTax
            Cost = slsPrice + (slsPrice * slsTax)
            With Range("B6")
                        .Formula = Cost
                        .NumberFormat = "0.00"
End With
strMsg = "The calculator total is " & "$" & Cost & "."
Range("A8").Formula = strMsg

End Sub

過程CalcCost使用了四個變量:slsPrice,slsTax,Cost和strMsg。因為這些變量都沒有顯式聲明,所以它們的數(shù)據(jù)類型都是Variant。變量slsPrice和slsTax是在過程的開始時通過給它們賦值而產(chǎn)生的,變量Cost分配的值是下面計算的結(jié)果:slsPrice + (slsPrice * slsTax)。價格的計算是使用變量slsPrice和slsTax提供的值來進行的。變量strMsg將信息合并為一個文本信息給用戶,然后這個信息是在工作表的一個單元格里輸入一個完整的句子。


當你給變量賦值時,需要在變量名稱后面輸入一個等號,等號之后是你要輸入的值。它可以是數(shù)字,公式或者帶引號的文本。賦給變量slsPrice,slsTax和Cost的值比較容易理解,然而保存在變量strMsg的值則有些棘手。解釋一下變量strMsg的內(nèi)容吧。


strMsg = "The calculator total is " & "$" & Cost & "."


1、字符串“The calculator total is ”被引號包括起來了,注意,后面的引號前有個空格。
?

2、字符&讓你將一個字符串附加在另一個字符串或者變量的內(nèi)容后面

3、在引號里面的美元符合(“$”)用來表明貨幣類型。因為美元符合是字符,它需要用引號來包括起來


4、字符&必須用于每次你要在前面的字符串后加新信息的時候
?  

5、變量Cost是一個占位符,當過程運行時,計算器的實際價格將顯示在這兒
?  

6、字符&可以連接任何字符串
?  

7、句號用引號包括起來。當你需要在句子后面加句號時,如果它是在一個變量后面時,你必須單獨再在后面加上它。

現(xiàn)在來運行它,將光標放在過程CalcCost的任何地方,并且選擇“運行”-“運行宏”

技巧:變量初始化
VB創(chuàng)建變量的時候就將其初始化了。變量假定為它們的默認值,數(shù)字型變量設(shè)置為0,布爾型變量初始化為False,字符串變量設(shè)置為空字符(””),已經(jīng)日期型變量則設(shè)置為1899年12月30日注意,你在運行這個過程時,VB可能會彈出下面的信息:“編譯錯誤:變量未定義”。如果這個情況發(fā)生了,點擊確定以關(guān)閉這個信息框。VB將會選中變量slsPrice并且加亮過程名稱Sub CalcCost,標題欄則顯示“Microsoft Visual Basic-Chap03.xls [中斷]”。VB中斷模式允許你在繼續(xù)之前更正錯誤。如果你遇到上面提及的錯誤時,通過選擇“運行”-“重新設(shè)置”來退出中斷模式;接下來,在代碼窗口的上面刪除顯示在第一行的語句Option Explicit。Option Explicit語句意味著在本模塊里使用的所有變量都必須經(jīng)過正式聲明。刪除OptionExplicit語句后,重新運行該過程,運行后,切換到Excel界面,過程運行的結(jié)果應(yīng)該和圖3-1一致。


VBA過程可以在工作表里輸入數(shù)據(jù)并計算結(jié)果

圖3-1 VBA過程可以在工作表里輸入數(shù)據(jù)并計算結(jié)果


單元格A8顯示變量strMsg的內(nèi)容。注意,在單元格B6里面輸入的價格有兩位小數(shù),而strMsg的價格卻顯示三位小數(shù)。要在單元格A8里顯示帶兩位小數(shù)的計算器價格,你必須給變量Cost設(shè)置需要的格式,而不是給該單元格設(shè)置格式。VBA有專門的函數(shù)讓你改變數(shù)據(jù)格式,你將使用Format函數(shù)來改變變量Cost的格式。該函數(shù)的語法是:

Format(expression, format)


Expression(表達式)是你要設(shè)置格式的值或者變量;format(格式)則是你要使用的格式類型。

1.  在CalcCost過程里更改變量Cost的計算:
Cost = Format(slsPrice + (slsPrice * slsTax), "0.00")

2.  將With…End With代碼塊取代為下述指令:
Range("B6").Formula = Cost

3.  將語句Range("B5").Formula = slsPrice * slsTax改為下面指令:
Range("B5").Formula = Format((slsPrice * slsTax), "0.00")

4.  重新運行修改后的程序
試驗過程CalcCost之后,你可能會困惑,為什么我們要為聲明變量煩惱,如果VB自己可以處理未聲明的變量的話?因為過程CalcCost是如此之短,因此你不必擔心VB每次使用這些Variant變量時會占用多少內(nèi)存。然而,在短的過程中,內(nèi)存問題不重要,但是當你輸入變量名稱時,你很可能出現(xiàn)錯誤。當你第二次使用Cost變量時,你忽略了“o”而寫成“Cst”,后果會如何呢?


Range("B6").Formula = Cst


如果你使用了Tax在下面的公式中,而沒有用slsTax,結(jié)果你將得到什么呢?


Cost = Format(slsPrice + (slsPrice * Tax), "0.00")


引入上面提及的錯誤后過程CalcCost的結(jié)果顯示在圖3-2。


變量名稱錯誤導(dǎo)致結(jié)果錯誤

圖3-2 變量名稱錯誤導(dǎo)致結(jié)果錯誤


注意,在圖3-2里,單元格B6沒有數(shù)值,因為VB沒有找到變量Cst的任務(wù)語句。再因為VB不知道銷售稅,顯示的計算器價格為總價(而沒有加稅金,見單元格A8)。VB不會猜測,它只是簡單地做你告訴它的事情。這帶我們到下一個部分,解釋如何避免這類錯誤。在你繼續(xù)之前,確保更正變量Cst和Tax為Cost和slsTax。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號