参见:在VBA中处理字符串
VBA中的字符串
VBA不仅可以处理数字,也可以处理文本(字符串)。VBA提供了两类字符串:
一类为固定长度的字符串,声明时包含指字的字符数。例如,下面的语句
Dim strFixedLong As String*100
声明字符串变量后,无论赋予该变量多少个字符,总是只包含100个字符,但字符串最长不超过65526个字符,且需要使用Trim函数去掉字符串中多余的空格。定长字符串只有在必要时才使用。
另一类为动态字符串。例如,声明字符串变量
Dim strDynamic As String
后,可以给该变量任意赋值,最多可包含20亿个字符。
VBA中处理字符串的函数
比较字符串
通常,在VBA中进行字符串比较时,会用到比较运算符(如=、>等)、Like运算符和StrComp函数。此外,在模块的开头用Option Compare语句指定比较方式。
比较运算符
可以采用简单的逻辑运算符进行两个字符串的比较,即<
(小于)、<=
(小于或等于)、>
(大于)、>=
(大于或等于)、=
(等于)、<>
(不等于)。此外,还可以使用Like
运算符进行比较。
StrComp函数
StrComp
函数返回字符串比较的结果。其语法为:
StrComp(string1,string2[,compare])
其中,参数string1
和string2
为必需的参数,可以是任何有效的字符串表达式。
参数compare
为可选参数,可设置为如下值:
0
=vbBinaryCompare
- 执行二进制比较(默认)1
=vbTextCompare
- 执行文本比较,比较时不区分大小写vbUseCompareOption
=-1
- 按照Option Compare 处设定的方式进行比较。
StrComp函数的返回值为:
内容 | 返回值 |
---|---|
string1 < string2 | -1 |
string1 = string2 | 0 |
string1 > string2 | 1 |
String1或String2为Null | NUll |
转换字符串
StrConv函数
使用StrConv
函数来按指定类型转换字符串。其语法为:
StrConv(string,conversion,LCID)
其中,参数string
为要转换的字符串,参数conversion
为指定转换的类型,参数LCID
为可选参数。
常量 | 值 | 意义 |
---|---|---|
vbUpperCase | 1 | 字符串转换成大写 |
vbLowerCase | 2 | 字符串转换成小写 |
vbProperCase | 3 | 字符串中每个字的开头字母转换成大写 |
vbUnicode | 64 | 根据系统的缺省码页将字符串转换成Unicode |
vbFromUnicode | 128 | 字符串由Unicode转换成系统的缺省码页 |
Str函数
将数值转换成字符串,即返回代表一个数值的字符串。其语法为:
Str(number)
当一个数字转成字符串时,总会在前面保留一个空位来表示正负,即字符串的第一位一定是空格或正负号。如果参数number为正,返回的字符串前面包含一空格。Str函数将句点(.)作为有效的小数点。此外,CStr函数和Format函数已经取代了Str函数,CStr函数不用为正数的符号而添加前导空格,Format函数能够用来识别小数点。
* CStr函数*
CStr将数值表达式转换成String数据类型。示例如下:
MyDouble = 437.324 ' MyDouble 为 Double 类型
MyString = CStr(MyDouble) ' MyString 的内容为"437.324"
[编程方法和技巧] 传递给CStr的未初始化的数字数据类型返回“0”,传递给CStr的未初始化的日期变量返回“0:00:00”。
创建字符串
Space函数
该函数返回指定数的空格的字符串。语法为:
Space(number)
其中,参数number
必须,为字符串中指定的空格数。
如下例所示:
Sub CreateString1()
Dim MyString
' 返回 10 个空格的字符串。
MyString = Space(10)
' 将 10 个空格插入两个字符串中间。
MyString = "Hello" & Space(10) & "World"
End Sub
String函数
该函数返回重复的字符或字符串。其语法为:
String(number,character)
其中,参数number必须,指定所返回的字符串的长度;参数character必须,指定字符的字符代码或字符串表达式。
例如,下面使用String函数生成指定长度且只含单一字符的字符串。
Sub CreateString2()
Dim MyString
MyString = String(5, "*") ' 返回 "*****"
MyString = String(5, 42) ' 返回 "*****"
MyString = String(10, "ABC") ' 返回 "AAAAAAAAAA"
End Sub
如果参数number包含Null,则返回Null;如果参数character包含Null,则返回Null;参数character可以指定为字符串或者是ANSI字符代码,如:
strString1=String(128,”=”) ‘用”=”填充
strString2=String(128,0) ‘用Chr$(0)填充
[编程方法和技巧]
(1) String函数在用于创建较长的“_”,“-”,或者“=”构成的水平线以便给报表分段时十分有用。
(2) 当调用API函数向缓冲区写入字符串值时,首先要用String函数创建一个长度合适的字符串变量,并且用诸如Chr$(0)之类的单个字符来填充。
获取字符串的长度
可以使用Len函数来确定任何字符串或字符串表达式的长度,其语法为:
Len(string|varname)
其中,参数string为任何有效的字符串表达式;参数varname为任何有效的变量名称。两个参数必须取一。
利用LenB函数可以确定存储某变量所需的实际字节数。
下面的示例使用Len函数来获取某字符串的长度(字符数)或某变量的大小(位数)。
Type CustomerRecord ' 定义用户自定义的数据类型
ID As Integer ' 将此定义放在常规模块中
Name As String * 10
Address As String * 30
End Type
Sub GetStrLen()
Dim Customer As CustomerRecord ' 声明变量
Dim MyInt As Integer, MyCur As Currency
Dim MyString, MyLen
MyString = "Hello World" ' 设置变量初值
MyLen = Len(MyInt) ' 返回 2
MyLen = Len(Customer) ' 返回 42