2015-09-07 440 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

相关问题