零长度字符是指””,空字符是指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。
发表评论