在vba中Range("BB1")表示對活動工作表BB1單元格的引用。
在vba中,Range代表某壹單元格、某壹行、某壹列、某壹選定區域(該區域可包含壹個或若幹連續單元格區域),或者某壹三維區域。
Range集合用法
本部分將說明下列返回 Range對象的屬性和方法:
Range屬性
Cells屬性
Range 和 Cells
Offset屬性
Union方法
Range屬性
可用 Range(arg)(其中 arg 為區域名稱)來返回代表單個單元格或單元格區域的 Range對象。下例將單元格 A1 中的值賦給單元格 A5。
Worksheets("Sheet1").Range("A5").Value?=?_Worksheets("Sheet1").Range("A1").Value
下例設置單元格區域 A1:H8 中每個單元格的公式,用隨機數填充該區域。在沒有對象識別符(句號左邊的對象)的情況下,使用 Range屬性將返回活動表上的壹個區域。如果活動表不是工作表,則該方法無效。在沒有明確的對象識別符的情況下,使用 Range屬性之前,可用Activate方法來激活工作表。
Worksheets("Sheet1").ActivateRange("A1:H8").Formula?=?"=Rand()"'Range?is?on?the?active?sheet
下例清除區域 Criteria 中的內容。
Worksheets(1).Range("Criteria").ClearContents如果用文本參數指定區域地址,必須以 A1 樣式記號指定該地址(不能用 R1C1 樣式記號)。
Cells屬性
可用 Cells(row, column)(其中 row 為行號,column 為列標)返回單個單元格。下例將單元格 A1 賦值為 24。
Worksheets(1).Cells(1,?1).Value?=?24下例設置單元格 A2 的公式。
ActiveSheet.Cells(2,?1).Formula?=?"=Sum(B1:B5)"雖然也可用Range("A1")?返回單元格 A1,但有時用 Cells屬性更為方便,因為對行或列使用變量。下例在 Sheet1 上創建行號和列標。註意,當工作表激活以後,使用 Cells屬性時不必明確聲明工作表(它將返回活動工作表上的單元格)。
Sub?SetUpTable()Worksheets("Sheet1").Activate
For?TheYear?=?1?To?5
Cells(1,?TheYear?+?1).Value?=?1990?+?TheYear
Next?TheYear
For?TheQuarter?=?1?To?4
Cells(TheQuarter?+?1,?1).Value?=?"Q"?&?TheQuarter
Next?TheQuarter
End?Sub
雖然可用 Visual Basic 字符串函數轉換 A1 樣式引用,但使用Cells(1, 1)?記號更為簡便(而且也是更好的編程習慣)。
可用 expression.Cells(row, column) 返回區域中的壹部分,其中 expression 是返回 Range對象的表達式,row 和 column 為相對於該區域左上角的偏移量。下例設置單元格 C5 中的公式。
Worksheets(1).Range("C5:C10").Cells(1,?1).Formula?=?"=Rand()"Range 和 Cells
可用 Range(cell1, cell2) 返回壹個 Range對象,其中 cell1 和 cell2 為指定起始和終止位置的 Range對象。下例設置單元格區域 A1:J10 的邊框線條的樣式。
With?Worksheets(1).Range(.Cells(1,?1),?_
.Cells(10,?10)).Borders.LineStyle?=?xlThick
End?With
註意每個 Cells屬性之前的句點。如果前導的 With 語句應用於該 Cells屬性,那麽這些句點就是必需的。本示例中,句點指示單元格處於第壹張工作表上。如果沒有句點,Cells屬性將返回活動工作表上的單元格。
Offset屬性
可用 Offset(row, column)(其中 row 和 column 為行偏移量和列偏移量)返回相對於另壹區域在指定偏移量處的區域。下例選定位於當前選定區域左上角單元格的向下三行且向右壹列處的單元格。由於必須選定位於活動工作表上的單元格,因此必須先激活工作表。
Worksheets("Sheet1").Activate 'Can't?select?unless?the?sheet?is?activeSelection.Offset(3,?1).Range("A1").Select
Union方法
可用 Union(range1, range2, ...) 返回多塊區域,即該區域由兩個或多個連續的單元格區域所組成。下例創建由單元格區域 A1:B2 和 C3:D4 組合定義的對象,然後選定該定義區域。
Dim?r1?As?Range,?r2?As?Range,?myMultiAreaRange?As?RangeWorksheets("sheet1").Activate
Set?r1?=?Range("A1:B2")
Set?r2?=?Range("C3:D4")
Set?myMultiAreaRange?=?Union(r1,?r2)
myMultiAreaRange.Select
使用包含若幹塊的選定區域時,Areas屬性很有用。它將壹個多塊選定區域分割為單個的 Range對象,然後將這些對象作為壹個集合返回。使用返回的集合的Count屬性可檢測壹個選定區域是否包含多塊區域,如下例所示。
Sub?NoMultiAreaSelection()NumberOfSelectedAreas?=?Selection.Areas.Count
If?NumberOfSelectedAreas?>?1?Then
MsgBox?"You?cannot?carry?out?this?command?"?&?_
"on?multi-area?selections"
End?If
End?Sub