2016-08-18 335 views
-1

有没有一种快速确定方法,如果.usedrange确实返回什么?Excel vba如何确定.usedrange是否为空

简单例子:

Dim wsKtE as worksheet 
Dim KtE() As Variant 

set wsKtE = ActiveSheet  
KtE = wsKtE.UsedRange 

如果在wsKtE没有数据,我得到一个类型不匹配的异常。我发现,如果wsKtE.usedrange.columns.countwsKtE.usedrange.rows.count都是1,我可以认为该区域可能是空的。

有没有更好的方法?

THX卡兹

+0

你应该怎么做取决于你为什么要'UsedRange',而不是别的东西。 'UsedRange'可以是单个单元格或一系列单元格,并且根据单元格*使用情况*填充它,而不取决于它们是否包含值(例如,如果您在空白表单上着色某些单元格,则它们将进入“UsedRange”即使表单上没有数据)。 – GSerg

+1

例如测试'IsEmpty(wsKtE.UsedRange.Value)'可能就足够了(因为你的代码试图将'UsedRange.Value'赋值给一个数组,当'.Value'为'Empty'时会失败),但是仍然会有一个单元格为'UsedRange'的情况,其中'Value'不会与数组兼容,您可以使用IsArray()检测该数组并手动构建数组。但是在我看来,你只是想在'KtE()'后面删除'()',这样任何'Value'必须提供的成功都可以成功分配给它,然后有可能''KtE'测试'IsEmpty'和'IsArray'。 – GSerg

+0

我知道,如果使用该区域,则会填充值。我不知道有多少或哪里。如果我使用'IsEmpty(wsKtE.UsedRange.Value)',它给了我一个空白表单的'FALSE'。啊,但删除括号后IsEmpty(KtE)'确实给了我'真实'。 – Kazschuri

回答

1
? typename(activesheet.usedrange.value) 

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