Excel vba如何最好地确定.usedrange是否为空

Excel vba如何最好地确定.usedrange是否为空,vba,excel,Vba,Excel,有没有一种快速的方法来确定.usedrange是否确实返回了一些东西 举个简单的例子: Dim wsKtE as worksheet Dim KtE() As Variant set wsKtE = ActiveSheet KtE = wsKtE.UsedRange 如果wsKtE中没有数据,我会得到一个类型不匹配的异常。我发现,如果wsKtE.usedrange.columns.count和wsKtE.usedrange.rows.count都是1,那么我可以推断该区域可能是空的

有没有一种快速的方法来确定
.usedrange
是否确实返回了一些东西

举个简单的例子:

Dim wsKtE as worksheet
Dim KtE() As Variant

set wsKtE = ActiveSheet    
KtE = wsKtE.UsedRange
如果wsKtE中没有数据,我会得到一个类型不匹配的异常。我发现,如果
wsKtE.usedrange.columns.count
wsKtE.usedrange.rows.count
都是1,那么我可以推断该区域可能是空的

有更好的办法吗


Thx Kaz

你应该做什么取决于你为什么想
UsedRange
,而不是其他什么
UsedRange
可以是单个单元格,也可以是一系列单元格,它的填充取决于单元格的使用情况,而不是取决于它们是否包含值(例如,如果在空工作表上为某些单元格着色,即使工作表上没有数据,它们也会进入
UsedRange
)。您可以测试
IsEmpty(wsKtE.UsedRange.Value)
(因为您的代码试图将
UsedRange.Value
分配给数组,当
.Value
空时,数组将失败),但是,仍然存在一种情况,即单单元格
UsedRange
中的
值无论如何都与数组不兼容,您可以使用
IsArray()
检测该情况并手动构造数组。但在我看来,你只是想在
KtE()
之后删除
()
,这样无论
Value
提供什么,都可以成功地分配给它,然后潜在地测试
KtE
是否为
IsEmpty
IsArray
。我知道,如果使用该区域,它就会填充值。我不知道有多少,也不知道在哪里。如果我使用
IsEmpty(wsKtE.UsedRange.Value)
它会给我一张空白的
FALSE
。啊,但是在去掉大括号之后,
IsEmpty(KtE)
确实给了我
TRUE
。因为,正如我所说的,空表和未使用的表是不同的。您需要从工作表中决定需要什么以及为什么需要,以及您需要的是否确实是
UsedRange
。如果您确定是,并且
IsEmpty
为false,请同时检查
IsArray
? typename(activesheet.usedrange.value)

No content on sheet >> 'Empty'
One cell with content >> 'String','Double', etc
Multiple cells with content >> 'Variant()'