VBA變量如何產(chǎn)生及聲明

2021-12-08 14:25 更新

你可以通過(guò)一個(gè)專(zhuān)門(mén)的命令來(lái)聲明變量從而產(chǎn)生一個(gè)變量,或者也可以直接在語(yǔ)句里使用變量(而不需要聲明)。當(dāng)你聲明變量時(shí),你實(shí)際上讓VB知道該變量的名稱(chēng)和數(shù)據(jù)類(lèi)型,這叫做“強(qiáng)制顯式聲明變量”。


如果你在使用變量前不告訴VB關(guān)于該變量的任何信息,你這是在含蓄地告訴VBA你想要?jiǎng)?chuàng)建這個(gè)變量。沒(méi)有明確聲明的變量會(huì)自動(dòng)地分配為Variant數(shù)據(jù)類(lèi)型(參見(jiàn)表3-1)。雖然不聲明變量很方便(你可以隨意創(chuàng)建變量,并且不用事先知道被賦值的數(shù)值的數(shù)據(jù)類(lèi)型就可以賦值給該變量),但是,它會(huì)導(dǎo)致很多問(wèn)題。


技巧:強(qiáng)制顯式聲明變量的好處

1、強(qiáng)制顯式聲明變量加速過(guò)程的執(zhí)行。因?yàn)閂B知道數(shù)據(jù)類(lèi)型,它只會(huì)占用實(shí)際儲(chǔ)存數(shù)據(jù)需要的內(nèi)


?2、強(qiáng)制顯式聲明變量使你的代碼可讀性和可理解性增加,因?yàn)樗械淖兞慷家蚜性谶^(guò)程的最前面
?  

3、強(qiáng)制顯式聲明變量幫助預(yù)防由于變量名稱(chēng)拼寫(xiě)錯(cuò)誤而導(dǎo)致的錯(cuò)誤。VB根據(jù)變量聲明里的拼寫(xiě)自動(dòng)更正變量名稱(chēng)。

技巧:隱式聲明變量的壞處
?  

1、如果你錯(cuò)誤拼寫(xiě)了一個(gè)變量名稱(chēng),VB會(huì)顯示運(yùn)行時(shí)間錯(cuò)誤,或者產(chǎn)生一個(gè)新的變量。你保證需要浪費(fèi)很多時(shí)間來(lái)做故障排除,然而,如果在過(guò)程前聲明了變量,這些很容易避免


2、因?yàn)閂B不知道你要保存的變量的數(shù)據(jù)類(lèi)型,它將分配給它Variant數(shù)據(jù)類(lèi)型。這導(dǎo)致你的過(guò)程運(yùn)行要慢一些,因?yàn)閂B每次在處理這個(gè)變量時(shí)不得不檢查數(shù)據(jù)類(lèi)型。因?yàn)閂ariant可以儲(chǔ)存任何一種數(shù)據(jù)類(lèi)型,VB不得不占用更多的內(nèi)存來(lái)儲(chǔ)存你的數(shù)據(jù)



如何聲明變量

你可以使用關(guān)鍵字Dim來(lái)聲明變量,Dim代表“Dimension”。關(guān)鍵字Dim后面緊跟變量名稱(chēng),再后面就是數(shù)據(jù)類(lèi)型。假設(shè)你想讓過(guò)程顯示員工的年齡,你計(jì)算年齡之前,必須給過(guò)程提供員工的生日。你可以這樣做,聲明一個(gè)叫DateOfBirth的變量:


Dim DateOfBirth As Date


注意,關(guān)鍵字Dim之后是變量名稱(chēng)(DateOfBirth)。如果你不喜歡這個(gè)名稱(chēng),你可以自由地改為其它的,只有你想用的名稱(chēng)不是VBA關(guān)鍵字之一就行。關(guān)鍵字As以及后面的表3-1其中的一個(gè)數(shù)據(jù)類(lèi)型,明確了該變量的數(shù)據(jù)類(lèi)型。數(shù)據(jù)類(lèi)型Date告訴VB變量DateOfBirth將會(huì)儲(chǔ)存日期。


要儲(chǔ)存員工的年齡,按下面方式聲明變量Age:


Dim Age As Integer


變量Age將會(huì)儲(chǔ)存今天和該員工生日之間年數(shù)的數(shù)字。因?yàn)槟挲g顯示為整年,所以變量Age就被分配為Integer數(shù)據(jù)類(lèi)型。你可能還想要你的程序追蹤員工的姓名,因此需要聲明另一個(gè)變量來(lái)保存員工的名和姓:


Dim FullName As String


因?yàn)樵~語(yǔ)“Name”已經(jīng)在VBA占用的清單上,在你的VBA程序里使用它的話保證會(huì)有錯(cuò)誤。將變量命名為FullName并且將它聲明為String類(lèi)型(因?yàn)閱T工姓名是文本),來(lái)保存員工姓名。


技巧: 隱式聲明變量
沒(méi)有用Dim語(yǔ)句來(lái)明確聲明的變量叫做隱式聲明。這些變量自動(dòng)會(huì)被分配一個(gè)數(shù)據(jù)類(lèi)型Variant。它們可以保存數(shù)字,字符串和其它信息類(lèi)型。你可以通過(guò)在你VBA程序的任何地方,簡(jiǎn)單地賦值給一個(gè)變量名稱(chēng)來(lái)創(chuàng)建一個(gè)變量。例如,你可以按下述方式來(lái)隱式聲明變量:DaysLeft = 100


聲明變量被認(rèn)為是編程的好習(xí)慣,因?yàn)樗钩绦蚩勺x性增強(qiáng)并且?guī)椭苊饽承╊?lèi)型的錯(cuò)誤。既然你已經(jīng)知道了如何聲明變量,我們就來(lái)看一下使用它的一個(gè)程序:


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是非常好的工具,它讓對(duì)象在運(yùn)行時(shí)將結(jié)果在立即窗口上顯示)


變量在程序的開(kāi)始部分就被聲明了,從那里開(kāi)始,它們就可以使用了。在上面的過(guò)程里,每個(gè)變量聲明在分開(kāi)的行。如果你想,你也可以同時(shí)在一行里聲明好幾個(gè)變量,用逗號(hào)分開(kāi)每個(gè)變量,例如:


Dim FullName As String, DateOfBirth As Date, Age As Integer


注意,關(guān)鍵字Dim只在變量聲明行的開(kāi)頭出現(xiàn)了一次。

當(dāng)VB執(zhí)行變量聲明語(yǔ)句時(shí),它產(chǎn)生了有確切名稱(chēng)的變量,并且占用內(nèi)存空間來(lái)儲(chǔ)存它們的值,然后,明確的值被賦給這些變量。如何給變量賦值?變量名稱(chēng),之后是一個(gè)等號(hào),等號(hào)的右邊是你希望用該變量?jī)?chǔ)存的數(shù)據(jù)。這里你輸入的數(shù)據(jù)必須是該變量聲明的數(shù)據(jù)類(lèi)型。文本數(shù)據(jù)應(yīng)該使用引號(hào)包括起來(lái),而日期需要用井號(hào)#包括起來(lái)。VB使用DateOfBirth提供的數(shù)據(jù)來(lái)計(jì)算員工的年齡,并且將計(jì)算結(jié)果儲(chǔ)存到Age這個(gè)變量。員工的姓名和年齡通過(guò)指令Debug.Print打印到立即窗口。當(dāng)程序運(yùn)行結(jié)束后,你必須打開(kāi)立即窗口來(lái)查看結(jié)果。


我們來(lái)看看你聲明了錯(cuò)誤的數(shù)據(jù)類(lèi)型,會(huì)發(fā)生什么情況。下面的過(guò)程是計(jì)算一個(gè)工作表里的總單元格數(shù)目,并且將結(jié)果使用一個(gè)對(duì)話框顯示給用戶。


Sub HowManyCells( )
             Dim NumOfCells As Integer
             NumOfCells = Cells.Count
             MsgBox "The worksheet has " & NumOfCells & " cells."
End Sub


錯(cuò)誤的數(shù)據(jù)類(lèi)型會(huì)導(dǎo)致錯(cuò)誤。在上面的過(guò)程里,當(dāng)VB嘗試將Cells.Count語(yǔ)句的結(jié)果賦給變量NumOfCells時(shí)失敗,Excel顯示信息“運(yùn)行時(shí)間錯(cuò)誤6——溢出”。這個(gè)錯(cuò)誤的產(chǎn)生原因時(shí)變量的無(wú)效數(shù)據(jù)類(lèi)型,工作表里單元格總數(shù)目不在Integer數(shù)據(jù)范圍之內(nèi)。要更正這個(gè)問(wèn)題,你應(yīng)該選擇一個(gè)可以包含一個(gè)大數(shù)據(jù)的數(shù)據(jù)類(lèi)型。然而,要快速地解決上面程序遇到的問(wèn)題,你只要?jiǎng)h除變量類(lèi)型AsInteger就行了。當(dāng)你重新運(yùn)行這個(gè)過(guò)程時(shí),VB將給你的變量分配為Variant類(lèi)型,盡管Variant比其它變量類(lèi)型使用更多的內(nèi)存和降低程序運(yùn)行速度(因?yàn)閂B不得不做額外的工作區(qū)檢查變量類(lèi)型),但是,如果這是在一個(gè)簡(jiǎn)短的程序里,使用Variant的代價(jià)也是難以覺(jué)察的。



技巧:

變量類(lèi)型是什么?


通過(guò)下述方法,你可以快速地查明你程序里使用的變量的類(lèi)型:在變量名稱(chēng)上單擊右鍵,并且從快捷菜單上選擇“快速信息”。


技巧:串聯(lián)
你可以將兩個(gè)或多個(gè)字符串結(jié)合成為一個(gè)新的字符串。這個(gè)操作稱(chēng)為串聯(lián)。你已經(jīng)在AgeCalc和HowManyCellss過(guò)程里看到了串聯(lián)的例子。串聯(lián)用&符號(hào)在表示。


例如,“Hisnameis”&FirstName


將會(huì)產(chǎn)生下述字符串:His name is John,或者His name is Michael。人名取決于變量FirstName的內(nèi)容。注意,在is和結(jié)束引號(hào)之間有一個(gè)空格。字符串的串聯(lián)也可以使用加號(hào)(+)來(lái)代表,然而,許多程序員為了消除混淆,寧愿將加號(hào)限制于數(shù)字的運(yùn)算。




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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)