在开始之前我想说我意识到你永远不应该依赖默认属性而我不会,但这很奇怪。我一直认为value
是Range
对象的默认属性,因此可行的原因是:
Range("A1") = 2
但是,this页面声称item
是Range
的默认属性。
此外,我提出的这个子建议cells
是默认属性:
Sub defaultprop()
Dim c As Variant
For Each c In Range("A1:A2")
Debug.Print c.value
Next c
For Each c In Range("A1:A2").value
Debug.Print c
Next c
End Sub
答案 0 :(得分:7)
Range
类的默认成员名为_Default
并被隐藏。当您启用"显示隐藏成员"对象浏览器中的功能,您可以看到它:
它具有与 (*) .Item
属性完全相同的签名,因此其中一个可以说是另一个的别名。
在任何情况下,Range
也实现了集合接口。因此,它可以在For Each
循环中使用 - 当你这样做时,循环将在每次迭代时调用.Item
并将当前项分配给循环变量。
在枚举之外使用时,例如使用Debug.Print
,则会使用.Value
,但我无法解释原因。也许其他人可以提出一个提示。(*)
(*)作为评论中的@GSerg points out,_Default()
和_Item()
并不完全相同。
答案 1 :(得分:0)
是的,看起来Value是Range的默认属性。
我在单元格A1中放了一个非常大的数字。
Sub Test()
Debug.Print "Range default = " & Range("A1") & vbCrLf _
& "Range Text = " & Range("A1").Text & vbCrLf _
& "Range Value = " & Range("A1").Value & vbCrLf _
& "Range Value2 = " & Range("A1").Value2
End Sub
Results in
Range default = 3.24643541346456E+28
Range Text = 3.25E+28
Range Value = 3.24643541346456E+28
Range Value2 = 3.24643541346456E+28
请注意,Range(" A1")的结果与Range(" A1")相同。值和范围(" A1") .Value2