VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别

在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见。比如最常用的:Worksheet.Range("A1:A10")

 VB的语法,使用参数的不一定是方法,也有可能是属性!(虽然属性的本质是方法)

例一:参数当作“索引”使用

定义一个类模块,模块名称Ints。为简化模型,使用了只读属性。

 1 Private arr(3) As Integer
 2 
 3 Public Property Get ArrValue(Index As Integer) As Integer
 4     ArrValue = arr(Index)
 5 End Property
 6 
 7 '初始化arr(3)的值
 8 Private Sub Class_Initialize()
 9     arr(0) = 1
10     arr(1) = 2
11     arr(2) = 3
12     arr(3) = 4
13 End Sub

调用:

1 Sub Test()
2     Dim c As New Ints
3     Debug.Print c.ArrValue(2)   'ArrValue是属性,并且带有参数( 索引 )
4     '输出结果=3
5 End Sub

例2:可选参数
定义一个类模块,模块名称MyCal。

这个类的作用是计算两个数的和,当加数为负数时,使加数=0 (示例使用,没多少实际意义)

 1 Private m As Integer
 2 Private n As Integer
 3 
 4 Public Property Get intm() As Integer
 5     intm = m
 6 End Property
 7 
 8 Public Property Let intm(ByVal xvalue As Integer)
 9     m = xvalue
10 End Property
11 
12 
13 Public Property Get intn(Optional b As Boolean = False) As Integer
14     intn = n
15 End Property
16 
17 '加数为负数时,n赋值为0
18 Public Property Let intn(Optional b As Boolean = False, ByVal xvalue As Integer)
19     If b And n <= 0 Then
20         n = 0
21     Else
22         n = xvalue
23     End If
24 End Property
25 
26 '计算两个数的和
27 Public Function MySum() As Integer
28       MySum = intm + intn
29 End Function

调用:

 1 Sub Test()
 2 Dim c As New MyCal
 3 
 4 c.intm = 4
 5 c.intn = -4
 6 
 7 Debug.Print c.MySum    '输出 0
 8 
 9 c.intm = 4
10 c.intn(True) = -4
11 
12 Debug.Print c.MySum    '输出 4
13 
14 End Sub

VBA中Range对象的Value就是有可选参数的属性

而Range对象的另外一个属性Value2是非参数化的属性

Value属性参数的意义:

 

posted @ 2016-11-29 19:37  复杂的石头  阅读(12683)  评论(0编辑  收藏  举报