8、Caller 属性
返回关于调用 Visual Basic 的信息(详细内容请参阅“说明”部分)。
语法
expression.Caller(Index)
expression 必选。该表达式返回 Application 对象。
Index Variant 类型,可选。数组的索引。仅当本属性返回数组时此参数才有用(详细内容请参阅“说明”部分)。
说明
本属性返回关于调用 Visual Basic 的信息,如下表所示。
调用进程 | 返回值 |
在单个单元格中输入的自定义函数 | 代表该单元格的 Range 对象 |
在单元格区域中作为数组公式的一部分的自定义函数 | 代表该单元格区域的 Range 对象 |
Auto_Open、 Auto_Close 、 Auto_Activate 或 Auto_Deactivate 宏 | 以文本方式返回的文档名 |
由 OnDoubleClick 或 OnEntry 属性所指定的宏 | 该宏所应用的图表对象标识符或单元格引用(若适用)的名称 |
“工具 ”菜单中的“宏”对话框,或上述之外的其它调用者 | #REF! 错误值 |
Caller 属性示例
本示例显示关于调用 Visual Basic 的信息。
Select Case TypeName(Application.Caller)
Case "Range"
v = Application.Caller.Address
Case "String"
v = Application.Caller
Case "Error"
v = "Error"
Case Else
v = "unknown"
End Select
MsgBox "caller = " & v
9、Offset 属性
可用 Offset(row, column) (其中 row 和 column 为行偏移量和列偏移量)返回相对于另一区域在指定偏移量处的区域。下例选定位于当前选定区域左上角单元格的下三行且右一列处的单元格。由于不能选定不在活动工作表上的单元格,故必须首先激活工作表。
Worksheets("sheet1").Activate
'can't select unless the sheet is active
Selection.Offset(3, 1).Range("A1").Select
Union 方法
可用 Union(range1, range2, ...) 返回多块的区域,即该区域由两个或多个连续的单元格块所组成。下例创建由单元格区域“A1:B2”和“C3:D4”组成的多块区域对象,然后选定该区域。
Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("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
10、Rows 属性
Application 对象:返回一个 Range 对象,此对象代表当前工作表的所有行。如果当前文档不是工作表, Rows 属性无效。只读。
Range 对象:返回一个 Range 对象,此对象代表指定区域中的所有行。只读。
Worksheet 对象: 返回一个 Range 对象,此对象代表指定工作表中的所有行。只读。
有关返回一个集合中单个成员的详细内容,请参阅返回集合中的对象。
说明
在不用对象识别符的情况下使用此属性等价于 ActiveSheet.Rows。
当应用于多选区域的Range对象时,该属性只返回该范围中第一个区域的行。例如,如果 Range 对象有两个 areas — A1:B2 和 C3:D4 — Selection.Rows.Count 返回 2 而不是 4。 要在一个可能包含多选区域的范围时,利用Areas.Count来判断该范围是否包含多个选择区域。如果是,则象第 3 个示例中所示,在该范围中的每个区域循环。
Rows 属性示例
本示例删除 Sheet1 的第三行。
Worksheets("Sheet1").Rows(3).Delete
本示例检查工作表一当前区域中的行,如果某行的第一个单元格值与前一行的第一个单元格的值相等,则删除此行。
For Each rw In Worksheets(1).Cells(1, 1).CurrentRegion.Rows
this = rw.Cells(1, 1).Value
If this = last Then rw.Delete
last = this
Next
本示例显示 Sheet1 选定区域的行数。如果是多重选定区域,本示例将对每一个子区域进行循环。
Worksheets("Sheet1").Activate
areaCount = Selection.Areas.Count
If areaCount <= 1 Then
MsgBox "The selection contains " & _
Selection.Rows.Count & " rows."
Else
i = 1
For Each a In Selection.Areas
MsgBox "Area " & i & " of the selection contains " & _
a.Rows.Count & " rows."
i = i + 1
Next a
End If