2015-09-07 448 views
10

在VBA中,將它做任何區別,如果我比較字符串,或類似的,針對vbNullString而不是對一個空字符串; ""?如果有的話,兩者之間有什麼不同?vbNullString和「」之間有什麼區別嗎?

+0

請參閱Rob Bovey的評論http://dailydoseofexcel.com/archives/2008/06/26/identify-empty-cells-in-vba/ – brettdj

回答

8

vbNullString""是不同的。這是一個描述內存使用差異的網頁exerpt。


「這是清除一個字符串變量通常的方式。

Text$ = "" 

真是浪費!首先,串""需要在每次使用時間爲6個字節的RAM。考慮替代方案:?

Text$ = vbNullString 

那麼,什麼是這個vbNullString是一個特殊的VB常數,表示空字符串字面""是一個空的ST環。有一個重要的區別。一個空字符串是一個真正的字符串。空字符串不是。這只是一個零。如果您知道C語言,則vbNullString等於NULL。

在大多數情況下,vbNullString相當於VB ""。實際上唯一不同的是,vbNullString更快分配和過程,它需要較少的內存。

如果您調用一些非VB API或組件,請在分發應用程序之前使用vbNullString測試調用。你正在調用的函數可能不會檢查一個NULL字符串,在這種情況下它可能會崩潰。在處理字符串參數之前,非VB函數應檢查NULL。運氣不好,你打電話的特定功能不會這樣做。在這種情況下,請使用""。通常的API都支持vbNullString,他們甚至可以用它更好地執行「


本文的其餘部分,對優化字符串,可能是有見地的,以及其他信息

全部網頁:!http://www.aivosto.com/vbtips/stringopt.html

3

This comparison指出將""分配給變量使用6個字節的內存,而使用vbNullString將不使用任何內存。

就個人而言,我更喜歡來評估字符串的長度。如果長度爲0,那麼我們也得出的結論是該字符串是一個vbNullString""。這種方法被接受爲檢查一個vbNullString的最快的方法。

If Len(string) = 0 Then 

您可以閱讀Len VS vbNullString VS ""比較here

+0

看起來不錯,除非有其他人提供更多信息,我會標記此內容作爲解決方案,但是,您鏈接的最後一篇文章指出了作者的確存在差異不知道它是什麼。它當然可以像分配給變量時所佔用的內存那樣簡單,就像你在答案中早些時候指出的那樣。 – eirikdaude

+1

有一個區別,''「'是一個零長度的現有字符串,'vbNullString'是一個類型爲'String'的空指針(不指向字符串)。爲了比較VB [隱藏差異](http://stackoverflow.com/questions/37035754/what-does-vb6-initialize-a-static-integer-to/37035879#comment61678413_37035879),但有時你想[取消隱藏](http://stackoverflow.com/a/20909528/11683)。 – GSerg

相關問題