2015-09-01 72 views
0

我想檢查一下excel中的某些單元是否爲空。所以我做了一個比較vbNullString,它工作得很好。但是現在,當單元格包含數字零時,似乎比較結果爲真?怎麼會這樣?範圍(...)。當Value爲數字0時,Value = vbNullString爲true?

感謝意見, 弗洛裏安

+1

如果你想測試單元格爲空,使用'IsEmpty()'。不要將它與'vbNullString'進行比較。 – Bond

+0

如果你有0進入單元格,那麼'vbNullString'不會返回true。 – brettdj

回答

0

這是因爲如果單元格中包含數字零,然後它不是空

.Value對象在Excel中的Range對象的屬性沒有輸入如果沒有寫入任何內容。換句話說,當單元格包含什麼,它與字符串和數字「空」的價值觀相媲美:

Empty cell value = vbNullString --> True 

,因爲從字面上講它的價值是""

Empty cell value = 0 --> True 

因爲數字說話它的價值0

...發生這種情況的原因是您仍未鍵入該範圍對象的值,因此在運行時該單元仍被視爲包含Variant類型(這意味着第e類型沒有定義,所以它就像一個零,如果這是數字,並且如果它是一個字符串,就像一個空字符串)。

但是,當您鍵入0(或者這是公式的輸出,如=2-2)時,您將類型「Numeric」分配給該範圍。狀態,細胞就數字這意味着:

是對數值零型(0)等於一個空字符串? False

數字空類型(0)是否等於零? True

如果你想零被視爲Null替代字符串""(即恆vbNullString),那麼你應該用數值檢查.Value = 0豐富你的病情。

+1

'vbNullString'與零長度字符串('「」'')不一樣。 'vbNullString'是一個值爲'0'的字符串。一個零長度的字符串佔用存儲空間(本質上是一個BSTR頭部)。 'vbNullString'實質上只是一個空字符串指針。 – Bond

+0

我試圖將工作單元的格式更改爲例如'0.00',我嘗試重新排列Range-Object的NumberFormat屬性。兩者都沒有成功,當我嘗試使用IsEmpty()或與vbNullString比較時,單元格被檢測爲空。這是因爲即使單元格中有0.00,Range.Value也是空的。該怎麼辦? :( – user3470049

相關問題