W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
你可以通過一個專門的命令來聲明變量從而產(chǎn)生一個變量,或者也可以直接在語句里使用變量(而不需要聲明)。當(dāng)你聲明變量時,你實(shí)際上讓VB知道該變量的名稱和數(shù)據(jù)類型,這叫做“強(qiáng)制顯式聲明變量”。
如果你在使用變量前不告訴VB關(guān)于該變量的任何信息,你這是在含蓄地告訴VBA你想要創(chuàng)建這個變量。沒有明確聲明的變量會自動地分配為Variant數(shù)據(jù)類型(參見表3-1)。雖然不聲明變量很方便(你可以隨意創(chuàng)建變量,并且不用事先知道被賦值的數(shù)值的數(shù)據(jù)類型就可以賦值給該變量),但是,它會導(dǎo)致很多問題。
技巧:強(qiáng)制顯式聲明變量的好處
1、強(qiáng)制顯式聲明變量加速過程的執(zhí)行。因?yàn)閂B知道數(shù)據(jù)類型,它只會占用實(shí)際儲存數(shù)據(jù)需要的內(nèi)
存
?2、強(qiáng)制顯式聲明變量使你的代碼可讀性和可理解性增加,因?yàn)樗械淖兞慷家蚜性谶^程的最前面
?
3、強(qiáng)制顯式聲明變量幫助預(yù)防由于變量名稱拼寫錯誤而導(dǎo)致的錯誤。VB根據(jù)變量聲明里的拼寫自動更正變量名稱。
技巧:隱式聲明變量的壞處
?
1、如果你錯誤拼寫了一個變量名稱,VB會顯示運(yùn)行時間錯誤,或者產(chǎn)生一個新的變量。你保證需要浪費(fèi)很多時間來做故障排除,然而,如果在過程前聲明了變量,這些很容易避免
2、因?yàn)閂B不知道你要保存的變量的數(shù)據(jù)類型,它將分配給它Variant數(shù)據(jù)類型。這導(dǎo)致你的過程運(yùn)行要慢一些,因?yàn)閂B每次在處理這個變量時不得不檢查數(shù)據(jù)類型。因?yàn)閂ariant可以儲存任何一種數(shù)據(jù)類型,VB不得不占用更多的內(nèi)存來儲存你的數(shù)據(jù)
你可以使用關(guān)鍵字Dim來聲明變量,Dim代表“Dimension”。關(guān)鍵字Dim后面緊跟變量名稱,再后面就是數(shù)據(jù)類型。假設(shè)你想讓過程顯示員工的年齡,你計(jì)算年齡之前,必須給過程提供員工的生日。你可以這樣做,聲明一個叫DateOfBirth的變量:
Dim DateOfBirth As Date
注意,關(guān)鍵字Dim之后是變量名稱(DateOfBirth)。如果你不喜歡這個名稱,你可以自由地改為其它的,只有你想用的名稱不是VBA關(guān)鍵字之一就行。關(guān)鍵字As以及后面的表3-1其中的一個數(shù)據(jù)類型,明確了該變量的數(shù)據(jù)類型。數(shù)據(jù)類型Date告訴VB變量DateOfBirth將會儲存日期。
要儲存員工的年齡,按下面方式聲明變量Age:
Dim Age As Integer
變量Age將會儲存今天和該員工生日之間年數(shù)的數(shù)字。因?yàn)槟挲g顯示為整年,所以變量Age就被分配為Integer數(shù)據(jù)類型。你可能還想要你的程序追蹤員工的姓名,因此需要聲明另一個變量來保存員工的名和姓:
Dim FullName As String
因?yàn)樵~語“Name”已經(jīng)在VBA占用的清單上,在你的VBA程序里使用它的話保證會有錯誤。將變量命名為FullName并且將它聲明為String類型(因?yàn)閱T工姓名是文本),來保存員工姓名。
技巧: 隱式聲明變量
沒有用Dim語句來明確聲明的變量叫做隱式聲明。這些變量自動會被分配一個數(shù)據(jù)類型Variant。它們可以保存數(shù)字,字符串和其它信息類型。你可以通過在你VBA程序的任何地方,簡單地賦值給一個變量名稱來創(chuàng)建一個變量。例如,你可以按下述方式來隱式聲明變量:DaysLeft = 100
聲明變量被認(rèn)為是編程的好習(xí)慣,因?yàn)樗钩绦蚩勺x性增強(qiáng)并且?guī)椭苊饽承╊愋偷腻e誤。既然你已經(jīng)知道了如何聲明變量,我們就來看一下使用它的一個程序:
Sub AgeCalc( )
‘variable declaration (變量聲明)
Dim FullName As String
Dim DateOfBirth As Date
Dim Age As Integer
'assign values to variables (賦值給變量)
FullName = "John Smith"
DateOfBirth = #01/03/1967#
'calculate age (計(jì)算年齡)
Age = Year(Now())-Year(DateOfBirth)
'print results to the Immediate window (在立即窗口里打印結(jié)果)
Debug.Print FullName & " is " & Age & " years old."
End Sub
(Debug是非常好的工具,它讓對象在運(yùn)行時將結(jié)果在立即窗口上顯示)
變量在程序的開始部分就被聲明了,從那里開始,它們就可以使用了。在上面的過程里,每個變量聲明在分開的行。如果你想,你也可以同時在一行里聲明好幾個變量,用逗號分開每個變量,例如:
Dim FullName As String, DateOfBirth As Date, Age As Integer
注意,關(guān)鍵字Dim只在變量聲明行的開頭出現(xiàn)了一次。
當(dāng)VB執(zhí)行變量聲明語句時,它產(chǎn)生了有確切名稱的變量,并且占用內(nèi)存空間來儲存它們的值,然后,明確的值被賦給這些變量。如何給變量賦值?變量名稱,之后是一個等號,等號的右邊是你希望用該變量儲存的數(shù)據(jù)。這里你輸入的數(shù)據(jù)必須是該變量聲明的數(shù)據(jù)類型。文本數(shù)據(jù)應(yīng)該使用引號包括起來,而日期需要用井號#包括起來。VB使用DateOfBirth提供的數(shù)據(jù)來計(jì)算員工的年齡,并且將計(jì)算結(jié)果儲存到Age這個變量。員工的姓名和年齡通過指令Debug.Print打印到立即窗口。當(dāng)程序運(yùn)行結(jié)束后,你必須打開立即窗口來查看結(jié)果。
我們來看看你聲明了錯誤的數(shù)據(jù)類型,會發(fā)生什么情況。下面的過程是計(jì)算一個工作表里的總單元格數(shù)目,并且將結(jié)果使用一個對話框顯示給用戶。
Sub HowManyCells( )
Dim NumOfCells As Integer
NumOfCells = Cells.Count
MsgBox "The worksheet has " & NumOfCells & " cells."
End Sub
錯誤的數(shù)據(jù)類型會導(dǎo)致錯誤。在上面的過程里,當(dāng)VB嘗試將Cells.Count語句的結(jié)果賦給變量NumOfCells時失敗,Excel顯示信息“運(yùn)行時間錯誤6——溢出”。這個錯誤的產(chǎn)生原因時變量的無效數(shù)據(jù)類型,工作表里單元格總數(shù)目不在Integer數(shù)據(jù)范圍之內(nèi)。要更正這個問題,你應(yīng)該選擇一個可以包含一個大數(shù)據(jù)的數(shù)據(jù)類型。然而,要快速地解決上面程序遇到的問題,你只要刪除變量類型AsInteger就行了。當(dāng)你重新運(yùn)行這個過程時,VB將給你的變量分配為Variant類型,盡管Variant比其它變量類型使用更多的內(nèi)存和降低程序運(yùn)行速度(因?yàn)閂B不得不做額外的工作區(qū)檢查變量類型),但是,如果這是在一個簡短的程序里,使用Variant的代價也是難以覺察的。
變量類型是什么?
通過下述方法,你可以快速地查明你程序里使用的變量的類型:在變量名稱上單擊右鍵,并且從快捷菜單上選擇“快速信息”。
技巧:串聯(lián)
你可以將兩個或多個字符串結(jié)合成為一個新的字符串。這個操作稱為串聯(lián)。你已經(jīng)在AgeCalc和HowManyCellss過程里看到了串聯(lián)的例子。串聯(lián)用&符號在表示。
例如,“Hisnameis”&FirstName
將會產(chǎn)生下述字符串:His name is John,或者His name is Michael。人名取決于變量FirstName的內(nèi)容。注意,在is和結(jié)束引號之間有一個空格。字符串的串聯(lián)也可以使用加號(+)來代表,然而,許多程序員為了消除混淆,寧愿將加號限制于數(shù)字的運(yùn)算。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: