我正在尝试弄清楚如何将 .count 之类的东西与我在 VBA 中存储为变量的范围一起使用
我做了以下有效的功能
Function test2() As Variant
test2 = Sheet12.Range("B1:B19").Count
End Function
这将返回值 19,因为该范围内有 19 行。
当我执行以下操作时,它只返回“#VALUE!”尽管除了范围的存储方式之外其他都是相同的
Function test2() As Variant
Dim Grada As Variant
Grada = Sheet12.Range("B1:B19")
test2 = Grada.Count
End Function
一旦以这种方式存储了范围,VBA 是否无法使用 .count 之类的语句,或者我错过了什么?
Grada
是 Variant
,而不是 Object
,因此默认情况下将被视为这样。这里的另一个微妙问题是默认方法/属性的使用。
Sheet12.Range("B1:B19")
有一个返回值的隐藏默认成员,因此在第二个代码中,您返回了一个由 Variant
组成的数组(即二维数组),反映了这 19 个单元格的内容。数组不是 Object
,因此没有方法。这里需要注意的重要一点是,使用隐藏的默认成员意味着您不会返回您所假设的Range
。
我没有尝试过这个,但是
Dim Grada As Object
可能已经得到了想要的结果,但是这么晚的绑定意味着您无法使用IntelliText/AutoComplete来帮助您确定哪些方法和属性可用。
这里的另一个选项是了解生成了一个二维数组,并概括为可以选择任何单元格块:
Function test2() As Variant
Dim Grada As Variant
Grada = Sheet12.Range("B1:B19")
test2 = (UBound(Grada,1) - LBound(Grada,1) + 1) * (UBound(Grada,2) - LBound(Grada,2) + 1)
End Function
我将其作为 OP 的练习(一个简单的练习)来确定该公式为何有效。使用
UBound
和 LBound
消除了基于 0 或基于 1 的数组上的任何异常情况 - 这是我现在的一种习惯,这样如果我将位复制到其他地方,我的代码本质上会更安全。