在vba中零长度字符、空字符、vbNull、vbNullChar、vbNullString的区别

零长度字符是指””,空字符是指ASCII 中字符编码为0的字符,即Null字符。

在vba内部还定义了很多常量,其中有三个是含有Nul的的常量,它们分别是vbNull、vbNullChar、vbNullString。

通过在VBA编辑环境中按下F2快捷键分别搜索查询以上三个常量可以得知:

Const vbNull = 1

Const vbNullChar = “”

Const vbNullString = “”

其中vbNull=1可以很好的理解,而vbNullChar 和vbNullString 常量定义都等于零长度字符,让人有点摸不着头脑。

继续查找MSDN中的官方文档,可以得知

vbNullChar=chr(0),指的是一个字符,这个字符的字符编码为0,即等于ASCII表中的第一个字符,Null字符。

vbNullString 指的是一个字符串,它不同于零长度字符串,主要是用于调用外部的动态链接库程序时使用(也就是API函数)。

vbNullChar是否等于零长度字符呢?也即vbNullChar是否按照常量的定义等于””?

可以使用如下代码测试:

Sub QQ1722187970()
    Dim str1 As String
    str1 = ""
    '零长度字符的Len返回0
    Debug.Print Len(str1)
    'Len(vbNullChar)返回1
    Debug.Print Len(vbNullChar)
    '返回False
    Debug.Print str1 = vbNullChar
End Sub

也就是vbNullChar不等于零长度字符。

再根据什么是BSTR数据类型? 一文,我们知道在vba中字符串变量存储的是字符串的第一个字符的内存地址,而实际的字符串是以BSTR类型存储的,BSRT类型是个复合数据类型,它由4个字节(字符串的字节长度,不含字符串结束符)+实际字符串+字符串结束符组成。

根据代码测试可以得知:

字符串变量 字符串长度(不包含字符串结束符,以字节为单位) 第1个字节 第2个字节 第3个字节 第4个字节 第5个字节 第6个字节
str1=”” 0 Null字符(字符串结束符) 未使用 未使用
str1=vbNullChar 2 Null字符 Null字符(字符串结束符) 未使用
str1=Chr(0) 2 Null字符 Null字符(字符串结束符) 未使用

而vbNullString则一般用在调用外部api函数时使用,如果直接赋值给字符串变量则会导致excel重启。

根据以上的知识,现总结如下:

空字符=vbNullChar=chr(0)

vbnull=1

零长度字符即不等于vbNullChar也不等于vbNullString。

       

发表评论