2016-08-18 31 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()'