W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你已經(jīng)學(xué)習(xí)的變量是用于儲(chǔ)存數(shù)據(jù)的,儲(chǔ)存數(shù)據(jù)是你使用“普通的”變量的主要原因。除了儲(chǔ)存數(shù)據(jù)從普通變量之外,還有引用VB對(duì)象的特殊變量,這些變量稱為對(duì)象變量。你在前面的章節(jié)中已經(jīng)學(xué)習(xí)了多種對(duì)象,現(xiàn)在,你開始學(xué)習(xí)如何用對(duì)象變量來代表對(duì)象。對(duì)象變量不儲(chǔ)存數(shù)據(jù),它們告訴數(shù)據(jù)在哪兒。例如,你可以用對(duì)象變量告訴VB數(shù)據(jù)在當(dāng)前工作表的單元格E10,對(duì)象變量使定位數(shù)據(jù)更容易。編寫VB程序時(shí),你經(jīng)常需要寫一些很長(zhǎng)的指令,例如:
Worksheets("Sheet1").Range(Cells(1,1), Cells(10, 5).Select
你可以聲明一個(gè)對(duì)象變量來告訴VB數(shù)據(jù)在哪兒,而不必使用很長(zhǎng)的指令來指向該對(duì)象。對(duì)象變量的聲明和你已經(jīng)學(xué)習(xí)的變量聲明類似,唯一的不同是在關(guān)鍵字As后面,你輸入詞語Object作為數(shù)據(jù)類型,例如:
Dim myRange As Object
上面的語句聲明了一個(gè)叫做myRange的對(duì)象變量。然而,實(shí)際上只聲明對(duì)象變量是不夠的,在使用這個(gè)變量于程序里之前,你還給這個(gè)對(duì)象變量賦上確定的值。使用關(guān)鍵字Set來給對(duì)象變量賦值,關(guān)鍵字Set后面是等號(hào),再后面是該變量指向的值,例如:
Set myRange = Worksheets("Sheet1").Range(Cells(1,1), Cells(10, 5))
上面的語句給對(duì)象變量myRange賦值,這個(gè)值指向工作表Sheet1的單元格區(qū)域A1:E10。如果你忽略了關(guān)鍵字Set,VB將會(huì)顯示一個(gè)錯(cuò)誤信息——“運(yùn)行時(shí)間錯(cuò)誤91:對(duì)象變量或With塊變量未設(shè)置”?,F(xiàn)在,又是來看看實(shí)例的時(shí)候了,下面的過程UseObjVariable示范一個(gè)叫myRange的對(duì)象變量的使用:
Sub UseObjVariable()
Dim myRange As Object
Set myRange = Worksheets("Sheet1"). _
Range(Cells(1, 1), Cells(10, 5))
myRange.BorderAround Weight:=xlMedium
With myRange.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Set myRange = Worksheets("Sheet1"). _
Range(Cells(12, 5), Cells(12, 10))
myRange.Value = 54
Debug.Print IsObject(myRange)
End Sub
我們來逐行分析一下過程UseObjVariable里的代碼。過程開始的時(shí)候是對(duì)象變量myRange的聲明,下一行將對(duì)象變量設(shè)置未Sheet1的區(qū)域A1:E10。從現(xiàn)在開始,你每次要引用這個(gè)區(qū)域時(shí),你不需要寫下整個(gè)地址,而只要使用這個(gè)捷徑——該對(duì)象變量名稱就可以了。這個(gè)過程的目的是在區(qū)域A1:E10外圍設(shè)置邊框,你不必使用下面這樣冗長(zhǎng)的指令:
Worksheets("Sheet1").Range(Cells(1, 1), _
Cells(10, 5)).BorderAround Weight:=xlMedium
而可以使用一個(gè)捷徑,使用對(duì)象變量名稱:
myRange.BorderAround Weight:=xlMedium
下一節(jié)語句是將選區(qū)A1:E10設(shè)置底色。同樣,你不需要使用你要操作的對(duì)象的冗長(zhǎng)地址,你可以使用簡(jiǎn)單的對(duì)象變量名稱myRange。下一句代碼是給對(duì)象變量myRange分配一個(gè)新的引用區(qū)域,VB將忘記老的引用,你下次使用myRange時(shí),它會(huì)引用另一個(gè)區(qū)域E12:J12。在新區(qū)域(E12:J12)輸入了54后,過程給你顯示如何確定某個(gè)變量時(shí)對(duì)象類型。如果myRange是對(duì)象變量的話,指令Debug.Print IsObject(myRange)將在立即窗口里面輸入True。IsObject是個(gè)VBA中指明某變量是否是對(duì)象變量的函數(shù)。
技巧:使用對(duì)象變量的好處
1、它們可以代替真實(shí)對(duì)象使用
?
2、它們比真實(shí)對(duì)象更短更容易記住
?
3、當(dāng)過程運(yùn)行時(shí),你可以改變它們的意義
對(duì)象變量可以引用任意一種對(duì)象,因?yàn)閂B有很多種對(duì)象,所以,要讓你的程序可讀性更強(qiáng),運(yùn)行更快,最好創(chuàng)建引用到具體對(duì)象類型的對(duì)象變量。例如,在過程UseObjVariable中,你可以將myRange對(duì)象變量聲明為Range對(duì)象,而不是通常的對(duì)象變量(Object):
Dim myRange As Range
如果你要引用一個(gè)具體的工作表,你可以聲明Worksheet對(duì)象:
Dim mySheet As Worksheet
Set mySheet = Worksheets("Marketing")
當(dāng)對(duì)象變量不再需要時(shí),你可以給它賦值Nothing,這將釋放內(nèi)存和系統(tǒng)資源:
Set mySheet = Nothing
當(dāng)你在VBA過程里看到一行給變量賦值的指令時(shí),你可以通過選擇該變量名稱并且按下Shift+F2,快速地定位到該變量的定義(聲明)?;蛘?,你也可以選擇“視圖”-“定義”,VB將跳到變量的聲明行。要回到剛才的位置,只要按下Ctrl+Shift+F2或選擇“視圖”-“最后位置”。我們來試試:
1. 定位到過程CostOfPurchase的代碼里
2. 定位到語句purchCost = CSng(newPurchase)
3. 在變量名稱上單擊右鍵,并在快捷菜單上選擇“定義”
4. 通過按Ctrl+Shift+F2返回剛才位置
5. 試試在其它過程的其它變量上查找定義,每次使用不同的方法跳到聲明位置。
技巧:這個(gè)變量是什么類型?
你可以使用一個(gè)VB內(nèi)置函數(shù)來查明變量的類型。參見第四章中使用函數(shù)VarType的例子。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: