VBA聲明和使用對象變量

2021-12-08 14:26 更新

你已經(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的例子。





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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號