如何理解vba中的定长字符串变量?

在vba中字符串变量可以有两种,一种是可变长度字符串变量,一种是固定长度字符串变量。

其中可变长度字符串变量的定义方式如下:

dim str1 as string

固定长度字符串变量的定义如下:

dim str2 as string *10

其中*10,表示申明str2变量为只能容纳10个字符长度的字符串变量

当定义了一个定长字符串变量时,未赋值以前,默认是以空字符(等于vbNullChar也等于chr(0))填充的,可以通过下面的代码验证。

当将一个超过10个字符长度的字符串赋值给定长字符串变量str2时,系统将自动截取前10个字符保存。

如下代码所示:

Sub QQ1722187970()
    Dim str1 As String
    Dim str2 As String * 10
    str1 = "asfdasdfas我撒旦法双方都"
    str2 = str1
    MsgBox str2
End Sub

str2变量的值实际为str1变量的前10个字符,也就是”asfdasdfas”。

当将一个小于10字符长度的字符串赋值给定长字符串变量str2时,系统将前面的字符填充具体的字符串,其余的以空格字符存储。可以通过以下的代码验证:

Sub QQ1722187970()
 '定义一个存储10个字符的字符串变量str1,1个字符用2个字节存储
 Dim str1 As String * 10
 Dim arr(19) As Byte
 '取实际的20个字节看未赋值前变量str1的存储情况
 CopyMemory VarPtr(arr(0)), StrPtr(str1), 20
 str1 = "adsf"
 '取实际的20个字节看赋值后变量str1的存储情况
 CopyMemory VarPtr(arr(0)), StrPtr(str1), 20
End Sub

通过监视arr数组变量,可以看到前8个字节分别存储了字符”a”、”d”、”s”、“f”,后面的12个字节存储的都是空格字符。

 

 

 

       

发表评论