VBA String

示例

字符串表示字符序列,有两种形式:

可变长度

Dim Value As String

长度可变的String允许追加和截断,并作为COM BSTR存储在内存中。它由一个4字节无符号整数组成,该整数存储以字节为单位的字符串长度,其后是字符串数据本身,为宽字符(每个字符2个字节),并以2个空字节结尾。因此,VBA可以处理的最大字符串长度是2,147,483,647个字符。

指向结构的内部指针(可由StrPtr()函数检索)指向数据的存储位置,而不是长度前缀。这意味着可以直接将VBA字符串传递给需要指向字符数组的指针的API函数。

由于长度可以更改,因此每次将变量分配给VBA时,VBA都会为String重新分配内存,这可能会对重复更改它们的过程施加性能损失。

固定长度

Dim Value As String * 1024    'Declares a fixed length string of 1024 characters.

固定长度的字符串将为每个字符分配2个字节,并作为简单的字节数组存储在内存中。分配后,字符串的长度是不可变的。它们在内存中不是以null终止的,因此用非null字符填充分配的内存的字符串不适合传递给期望以null终止的字符串的API函数。

固定长度的字符串保留了传统的16位索引限制,因此最多只能有65,535个字符。尝试分配比可用内存空间更长的值不会导致运行时错误-而是将结果值简单地截断:

Dim Foobar As String * 5
Foobar = "Foo" & "bar"
Debug.Print Foobar          'Prints "Fooba"

转换为任一类型的String的强制转换函数为CStr()。