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