是否可能为空Excel范围集合?

是否可能为空Excel范围集合?,excel,vba,Excel,Vba,是否可能有一个空的Excel范围集合,即是否碰巧有一个Excel.range类型的对象obj obj.Cells.Count = 0 我强烈感觉这是不可能的 请给出一个权威的参考资料,说明这确实是不可能的,或者提供一个反例。我想这将部分回答您的问题 除此之外,我所能说的就是所有对象都必须Set,以便对它们调用任何类型的方法。这是这个概念的基础。您可以拥有任何类型的对象,例如 Dim obj as Range Dim obj as Application Dim obj,只要长 但它实际上只是这

是否可能有一个空的Excel范围集合,即是否碰巧有一个Excel.range类型的对象obj

obj.Cells.Count = 0
我强烈感觉这是不可能的

请给出一个权威的参考资料,说明这确实是不可能的,或者提供一个反例。

我想这将部分回答您的问题
除此之外,我所能说的就是所有对象都必须
Set
,以便对它们调用任何类型的方法。这是这个概念的基础。您可以拥有任何类型的对象,例如
Dim obj as Range

Dim obj as Application

Dim obj,只要长

但它实际上只是这个变量在内存中的一个预留空间,正在等待分配一个引用
所以答案很简单:不,不可能设置空范围对象
你自己看看吧:

Sub RangeTest()
    Dim rng As Range
    'Set rng = Range("A1")
    ActiveWorkbook.Names.Add Name:="rngName", RefersTo:=rng.Address
    MsgBox "count: " & rng.Cells.Count
End Sub
然而,显然上述方法失败了

Sub RangeTest()
    Dim rng As Range
    Set rng = Range("A1")
    ActiveWorkbook.Names.Add Name:="rngName", RefersTo:=rng.Address
    MsgBox "count: " & rng.Cells.Count
End Sub

也 明言

范围对象表示一个或多个单元格,可用于 表示单个单元格、行、列和选定的单元格,这些单元格 包含一个或多个连续的单元格块,或三维范围


空范围的正确表示形式是“无”。 例如:

Debug.Print Intersect(Range("A1"), Range("B1")) Is Nothing
True
所以你的函数应该什么都不返回。
虽然存在空集合这样的东西,但范围不能是空集合。

问题要求使用范围类型的对象,因此必须分配变量,而不仅仅是声明变量。但是,您在上一部分中提供的参考回答了这个问题。通过删除单元格,您可能会得到无效的
范围
——请参阅@barrowc这是一个很好的链接!背后的问题是有一个用户定义的函数返回一个范围集合。例如“SUM(MyUDF(SOME_FILTER))”。现在,如果筛选器不应用于任何单元格,如果不是空集合,返回什么?返回一个无效范围会使事情进一步复杂化,在这种情况下,“总和”将无效。