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()'