1 VBA中的字元串
2 VBA中處理字元串的函數
2.1 比較字元串
2.2 轉換字元串
2.3 建立字元串
2.4 擷取字元串的長度
2.5 格式化字元串
2.6 查找字元串
2.7 提取字元/字元串
2.8 删除空格
2.9 傳回字元代碼
2.10 傳回數值代表的相應字元
2.11 使用位元組的函數
2.12 傳回數組的函數
2.13 連接配接字元串
2.14 替換字元串
2.15 反向字元串
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 VBA中的字元串
VBA不僅可以處理數字,也可以處理文本(字元串)。VBA提供了兩類字元串:
一類為固定長度的字元串,聲明時包含指字的字元數。例如,下面的語句
Dim strFixedLong As String*100
聲明字元串變量後,無論賦予該變量多少個字元,總是隻包含100個字元,但字元串最長不超過65526個字元,且需要使用Trim函數去掉字元串中多餘的空格。定長字元串隻有在必要時才使用。
另一類為動态字元串。例如,聲明字元串變量Dim strDynamic As String後,可以給該變量任意指派,最多可包含20億個字元。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2 VBA中處理字元串的函數
2.1 比較字元串
通常,在VBA中進行字元串比較時,會用到比較運算符(如=、>等)、Like運算符和StrComp函數。此外,在子產品的開頭用Option Compare語句指定比較方式。
2.1.1 比較運算符
可以采用簡單的邏輯運算符進行兩個字元串的比較,即<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、=(等于)、<>(不等于)。此外,還可以使用Like運算符進行比較。
2.1.2 StrComp函數
StrComp函數傳回字元串比較的結果。其文法為:
StrComp(string1,string2[,compare])
其中,參數string1和strng2為必需的參數,可以是任何有效的字元串表達式。
參數Compare為可選參數,如果該參數為Null,将發生錯誤。如果參數Compare設定為常數vbUseCompareOption或-1或忽略該參數,将使用Option Compare語句設定進行比較;如果忽略該參數且沒有設定Option Compare語句,則按二進制進行比較;如果參數Compare設定為常數vbBinaryCompare或0,則用二進制進行比較;如果參數Compare設定為常數vbTextCompare或1,則按文本進行比較;如果參數Compare設定為常數vbDatabaseCompare或2,此時僅适用于Microsoft Access,進行基于資料庫資訊的比較。
StrComp函數的傳回值為:如果String1<String2,則傳回值為-1;如果String1=String2,則傳回值為0;如果String1>String2,則傳回值為1;如果String1或String2為Null,則傳回值為Null。
看看下面的示例:
Sub testStringCompare()
Dim MyStr1 As String, MyStr2 As String, MyComp1, MyComp2, MyComp3, MyComp4
MyStr1 = "ABCD"
MyStr2 = "abcd"
MyComp1 = StrComp(MyStr1, MyStr2, 1) ' 傳回 0
MyComp2 = StrComp(MyStr1, MyStr2, 0) ' 傳回 -1
MyComp3 = StrComp(MyStr1, MyStr2) ' 傳回 -1
MyComp4 = StrComp(MyStr2, MyStr1) '傳回1
MsgBox "StrComp(MyStr1, MyStr2, 1)的結果為:" & MyComp1
MsgBox "StrComp(MyStr1, MyStr2, 0)的結果為:" & MyComp2
MsgBox "StrComp(MyStr1, MyStr2)的結果為:" & MyComp3
MsgBox "StrComp(MyStr2, MyStr1)的結果為:" & MyComp4
End Sub
示例說明:如果StrComp函數的第三個參數值為1,則以文本比較的方式進行字元串比較;如果第三個參數值為0或忽略該參數,則以二進制比較的方式進行字元串比較。注意,文本比較的方式不區分字母大小寫,而二進制比較方式則區分大小寫。
[程式設計方法和技巧] 完成一次簡單的單一比較,如
If UCase(sString1)<UCase(sString2) Then
比使用StrComp函數:
If StrComp(sString1,sString2,vbTextCompare)=-1 Then
在性能上要提高30%,且更容易閱讀和了解。
2.2 轉換字元串
2.2.1 StrConv函數
使用StrConv函數來按指定類型轉換字元串。其文法為:
StrConv(string,conversion,LCID)
其中,參數string為要轉換的字元串,參數conversion為指定轉換的類型,參數LCID為可選參數。
如果将參數conversion設定為vbUpperCase或1,則将字元串轉換成大寫;設定為vbLowerCase或2,則将字元串轉換成小寫;設定為vbProperCase或3,則将字元串中每個字的開頭字母轉換成大寫;設定為vbUnicode或64,則根據系統的預設碼頁将字元串轉換成Unicode;設定為vbFromUnicode或128,則将字元串由Unicode轉換成系統的預設碼頁。
在将ANSI格式的Byte數組轉換成字元串時,應使用StrConv函數;轉換Unicode格式的數組時,使用指派語句。下面的例子使用StrConv函數将Unicode字元串轉換成ANSI字元串:
Sub testConverseString()
Dim i As Long
Dim x() As Byte
x = StrConv("ABCDEFG", vbFromUnicode) ' 轉換字元串。
For i = 0 To UBound(x)
Debug.Print x(i)
Next
End Sub
下面的例子将句子中每個詞語的首字母轉換為大寫:
Sub testConverseString2()
Debug.Print StrConv("my book is this book.", vbProperCase)
End Sub
程式運作後,在VBE視窗中的立即視窗中将會看到上述結果。
下面的示例示範了如何把一個字元串轉換為位元組數組,以便使用在API函數調用中:
Sub Test()
Dim byArray() As Byte
Dim sString As String
sString = "Some stuff"
byArray = StrConv(sString, vbFromUnicode)
End Sub
StrConv函數将下面的字元看成是字的分隔符:
Null:Chr$(0)
水準制表符:Chr$(9)
換行符:Chr$(10)
垂直制表符:Chr$(11)
換頁符:Chr$(12)
回車符:Chr$(13)
空格:Chr$(32)
在使用API時該函數很重要,很多程式調用都要求傳遞給它們Unicode字元,或者賦給傳回變量Unicode字元。
2.2.2 Str函數
将數值轉換成字元串,即傳回代表一個數值的字元串。其文法為:
Str(number)
當一個數字轉成字元串時,總會在前面保留一個空位來表示正負,即字元串的第一位一定是空格或正負号。如果參數number為正,傳回的字元串前面包含一空格。Str函數将句點(.)作為有效的小數點。示例如下:
MyString = Str(459) ' 傳回 " 459"
MyString = Str(-459.65) ' 傳回 "-459.65"
MyString = Str(459.001) ' 傳回 " 459.001"
使用LTrim函數可删除Str函數在傳回的字元串開頭添加的前導空格。此外,CStr函數和Format函數已經取代了Str函數,CStr函數不用為正數的符号而添加前導空格,Format函數能夠用來識别小數點。
2.2.3 CStr函數
CStr将數值表達式轉換成String資料類型。示例如下:
MyDouble = 437.324 ' MyDouble 為 Double 類型
MyString = CStr(MyDouble) ' MyString 的内容為"437.324"
[程式設計方法和技巧]
傳遞給CStr的未初始化的數字資料類型傳回“0”,傳遞給CStr的未初始化的日期變量傳回“0:00:00”。
2.3 建立字元串
2.3.1 Space函數
該函數傳回指定數的空格的字元串。文法為:
Space(number)
其中,參數number必須,為字元串中指定的空格數。
如下例所示:
Sub CreateString1()
Dim MyString
' 傳回 10 個空格的字元串。
MyString = Space(10)
' 将 10 個空格插入兩個字元串中間。
MyString = "Hello" & Space(10) & "World"
End Sub
該函數可用于在調用外部DLL時建立字元串緩沖區,特别是在調用Window API時。此外,使用該函數還可以使字元串在特定長度的緩沖區左對齊或右對齊。
注意,如果參數number是負數,則會産生運作時錯誤5:“無效的過程調用或參數”。
[程式設計方法和技巧] 可以使用Space函數添加和清除存儲在定長字元串中的資料,例如,下面的代碼用空格填充一個定長字元串:
Dim strFixed As String * 32
……
strFixed = Space(Len(strFixed))
2.3.2 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)之類的單個字元來填充。
2.4 擷取字元串的長度
可以使用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
MyLen = Len(MyString) ' 傳回 11
MyLen = Len(MyCur) ' 傳回 8
End Sub
此外,在需要大量判斷是否為空字元串的代碼中,使用Len函數也可以加快代碼執行的速度。例如:
If strTemp = "" Then
'要執行的代碼
End If
上面的代碼可以用以下代碼代替:
If Len(strTemp) = 0 Then
'要執行的代碼
End If
注意:
(1) 參數string和參數varname互不相容,即隻能指定這兩個參數中的某一個,不能同時指定這兩個參數。
(2) 如果參數string或參數varname中包含Null,則Len函數會傳回Null。
(3) 在向檔案寫入某種使用者自定義類型資料時,Len函數會傳回資料的大小(字元數)。
(4) LenB函數傳回使用者自定義類型資料實際占用的記憶體大小。
(5) 在對位元組資料或Unicode字元串使用LenB函數時,LenB函數傳回表示資料或字元串的位元組數。
(6) 不能對對象變量使用Len函數。
(7) 如果參數varname是一個數組,則必須指定一個有效的下标,即Len函數不能确定數組中元素的總數或數組占用記憶體的大小。
(8) Len函數對Variant類型變量的處理和字元串變量一樣,Len函數傳回變量所存儲的實際字元數,如下面的代碼:
Dim vVar
vVar=100
MsgBox Len(vVar)
結果為3。
(9) 由于VB本質上使用的是Unicode字元串(用兩個位元組的空間來存儲一個字元),是以當相同的字元串變量傳遞給Len函數和LenB函數時會出現不同的傳回值。例如,對于一個包含4個字元的字元串,使用Len函數時傳回值為4,使用LenB函數則為8。
(10) 使用強類型變量(即強制聲明該變量的類型)時,Len函數會傳回存儲該變量所需的位元組數。例如,長整型變量的長度為4。
下面的示例說明了為什麼要顯式聲明資料類型:
Sub test()
Dim lVar As Long
Dim vVar
lVar = 10000000
vVar = 10000000
MsgBox LenB(lVar) '傳回4
MsgBox LenB(vVar)'傳回16
End Sub
很顯然,Variant類型變量比強制聲明的類型變量要占用更多的記憶體。
2.5 格式化字元串
可以使用Format函數規定輸出的字元串的格式,其文法為:
Format(expression[,format[,firstdayofweek[,firstweekofyear]]])
其中,參數expression必須,為任何有效的表達式;其餘參數均可選。參數format表示所要采用的格式,參數firstdayofweek使用常數,表示一星期的第一天,參數firstweekofyear使用常數,表示一年的第一周。
在參數format中,使用字元“@”,表示空格或字元占位符,如果在輸入的字元串相應位置有字元,則顯示該字元,否則顯示空格;使用字元“&”,表示空或字元占位符,如果在輸入的字元串的相應位置有字元,則顯示該字元,否則不顯示;使用字元“<”,則将所有字元顯示為小寫格式;使用字元“>”,則将所有字元顯示為大寫格式;使用字元“!”,強制占位符從左向右填滿, 滿足預設為從右向左。
例如下面的代碼:
Dim strOut
strOut = Format("8888888", "(@@@)&&&-&&&&") '傳回( )888-8888
strOut = Format("8888888", "(&&&)&&&-&&&&") '傳回()888-8888
在Format函數中,還可以同時格式化普通字元串和空字元串,隻須在指定的格式中用分号隔開兩個部分,第一部分用于非空字元串,第二部分用于空字元串。例如:
strOut = Format("6666666", "(@@@)&&&-&&&&;No Phone") '傳回( )666-6666
strOut = Format("", "(@@@)&&&-&&&&;No Phone") '傳回No Phone
又如,下面的代碼将字母全部轉換為大寫:
Dim strOut
strOut = Format("Hello", ">@@@@@") ‘傳回HELLO
同理,可以使用“<”将字母全部轉換為小寫。
Format函數的簡要使用規則:
(1) 允許用預先定義或使用者定義的格式來建立多種用于輸出字元串、數字和日期/時間資料的方法。
(2) 建立使用者定義的數值格式最多可以有四個部分,每個部分代表一種不同類型的數值,且用分号分隔。第一部分在單獨命名使用時可用于所有值,與其它多個部分一起使用時隻用于正數;第二部分用于負數;第三部分用于零值;第四部分用于Null值。
在參數format中不必包括所有四部分,但所用部分的數目決定了每一個部分所定義的數值類型:隻有一個部分,則應用于所有數值;有兩個部分,則第一部分應用于正數和零值,第二部分應用于負數;有三個部分,則第一部分用于正數,第二部分應用于負數,第三部分應用于零值;有四個部分,則每部分的使用如前所述。
如果忽略了一個部分,則該部分使用與定義正數的部分一樣的格式,例如:
“#.00;;#,##”
表示負數值與正數值使用同一種格式顯示。
如果參數含有命名格式,則隻能有一個部分。
(3) 字元串值的使用者定義格式有兩個部分,第一部分可應用于所有值,第二部分隻應用于Null值或零長字元串。
(4) 預定義的日期和時間格式如下:
General Date
範例: Format("28/02/2007","General Date")
傳回: 2007-2-28
Long Date
範例: Format("28/02/2007","Long Date")
傳回: 2007年2月28日
Medium Date
範例: Format("28/02/2007","Medium Date")
傳回: 07-02-28
Short Date
範例: Format("28/02/2007","Short Date")
傳回: 2007-2-28
Long Time
範例: Format("17:30:03","Long Time")
傳回: 17:30:03
Medium Time
範例: Format("17:30:03","Medium Time")
傳回: 下午 05:30
Short Time
範例: Format("17:30:03","Short Time")
傳回: 17:30
(5) 預定義的數值格式如下:
General Number
範例: Format(123456.0789,"General Number")
傳回: 123456.0789
Currency
範例: Format(123456.0789,"Currency")
傳回: ¥123,456.08
Fixed
範例: Format(0.2,"Fixed")
傳回: 0.20
Standard
範例: Format(123456.0789,"Standard")
傳回: 123,456.08
Percent
範例: Format(.7321,"Percent")
傳回: 73.21%
Scientific
範例: Format(123456.0789,"Scientific")
傳回: 1.23E+05
Yes/No
範例1: Format(0,"Yes/No")
傳回: No
範例2: Format(23,"Yes/No")
傳回: Yes
True/False
範例1: Format(0,"True/False")
傳回: False
範例2: Format(23,"True/False")
傳回: True
On/Off
範例1: Format(0,"On/Off")
傳回: Off
範例2: Format(23,"On/Off")
傳回: On
(6) 建立使用者自定義的日期和時間格式的字元:
C
元素:日期
顯示:基于目前Windows系統的短日期和短時間國際設定格式的日期或時間。
範例:Format("28/02/2007 17:30:03","c")
傳回:2007-2-28 17:30:03
dddddd
元素:日期
顯示:基于目前Windows系統的長日期國際設定格式的完整日期。
範例:Format("28/02/2007","dddddd")
傳回:2007年2月28日
/
元素:日期分隔符
範例:Format("28/02/2007","mm-dd-yyyy")
傳回:02-28-2007
d
元素:日
顯示:1~31範圍内的一個數字,無前導0。
範例:Format("02/02/2007","d")
傳回:2
dd
元素:日
顯示:01~31範圍内的一個數字,有前導0。
範例:Format("02/02/2007","dd")
傳回:02
ddd
元素:日
顯示:英文簡寫(Sun~Sat)
範例:Format("02/02/2007","ddd")
傳回:Fri
dddd
元素:日
顯示:英文全稱(Sunday~Saturday)
範例:Format("02/02/2007","dddd")
傳回:Friday
ddddd
元素:日期
顯示:基于計算機Windows國際設定短日期格式的日期。
範例:Format("02/02/2007","ddddd")
傳回:2007-2-2
h
元素:小時
顯示:0~23範圍内的一個數字,無前導0。
範例:Format("05:08:06","h")
傳回:5
hh
元素:小時
顯示:00~23範圍内的一個數字,有前導0。
範例:Format("05:08:06","hh")
傳回:05
n
元素:分
顯示:0~59範圍内的一個數字,無前導0。
範例:Format("05:08:06","n")
傳回:8
nn
元素:分
顯示:00~59範圍内的一個數字,有前導0。
範例:Format("05:08:06","nn")
傳回:08
s
元素:秒
顯示:0~59範圍内的一個數字,無前導0。
範例:Format("05:08:06","s")
傳回:6
ss
元素:秒
顯示:00~59範圍内的一個數字,有前導0。
範例:Format("05:08:06","ss")
傳回:06
ttttt
元素:時間
顯示:基于12小時制的時間,包含Windows區域設定中指定的時間分隔符和前導0。
範例:Format("05:08:06","ttttt")
傳回:5:08:06
AM/PM
元素:時間
顯示:用大寫的AM和PM表示的12小時制的時鐘格式。
範例:Format("17:08:06","hh:mm:ss AM/PM")
傳回:05:08:06 PM
am/pm
元素:時間
顯示:用小寫的am和pm表示的12小時制時鐘格式。
範例:Format("17:08:06","hh:mm:ss am/pm")
傳回:05:08:06 pm
A/P
元素:時間
顯示:12小時制時鐘格式,用大寫“A”表示AM,大寫“P”表示PM。
範例:Format("17:08:06","hh:mm:ss A/P")
傳回:05:08:06 P
a/p
元素:時間
顯示:12小時制時鐘格式,用小寫“a”表示am,小寫“p”表示pm。
範例:Format("17:08:06","hh:mm:ss a/p")
傳回:05:08:06 p
:
元素:時間分隔符
顯示:時間格式
範例:Format("17:08:06","hh:mm:ss")
傳回:17:08:06
w
元素:星期幾
顯示:1~7範圍内的一個數字(1~7分别表示星期天到星期六)。
範例:Format("02/02/2007","w")
傳回:6
ww
元素:周
顯示:1~54範圍内的一個數字。
範例:Format("02/02/2007","ww")
傳回:5
m
元素:月
顯示:1~12範圍内的一個數字,無前導0。
範例:Format("02/02/2007","m")
傳回:2
mm
元素:月
顯示:01~12範圍内的一個數字,有前導0。
範例:Format("02/02/2007","mm")
傳回:02
mmm
元素:月
顯示:英文月份簡寫(Jan~Dec)
範例:Format("02/02/2007","mmm")
傳回:Feb
mmmm
元素:月
顯示:英文月份全稱(January~December)
範例:Format("02/02/2007","mmmm")
傳回:February
q
元素:季度
顯示:1~4範圍内的一個數字
範例:Format("02/02/2007","q")
傳回:1
y
元素:一年中的某天
顯示:1~366範圍内的一個數字。
範例:Format("02/02/2007","y")
傳回:33
yy
元素:年
顯示:00~99範圍内的一個兩位數字。
範例:Format("02/02/2007","yy")
傳回:07
yyyy
元素:年
顯示:100~9999範圍内的一個四位數字。
範例:Format("02/02/2007","yyyy")
傳回:2007
(7)用于建立使用者自定義數字格式的字元
說明:數字占位符。如果參數expression所代表的數值在相應的0位置上有一個數字,則顯示這個數字,否則顯示0。所指定的小數點後的位數,使數值舍入為給定的小數位數,但不影響小數點左邊的數字位數。
範例1:Format(23.675,"00.0000") 傳回:23.6750
範例2:Format(23.675,"00.00") 傳回:23.68
範例3:Format(2345,"00000") 傳回:02345
範例4:Format(2345,"00.00") 傳回:2345.00
#
說明:數字占位符。如果參數expression所代表的數值在相應的#位置上有一個數字,則顯示這個數字,否則什麼也不顯示。
範例1:Format(23.675,"##.##") 傳回:23.68
範例2:Format(23.675,"##.####") 傳回:23.675
範例3:Format(12345.25,"#,###.##") 傳回:12,345.25
.
說明:小數點占位符。小數點占位符實際顯示的字元由本機Windows系統國際設定格式決定。
%
說明:百分數占位符。首先将參數expression所代表的數值乘以100,然後把它作為百分數顯示。
範例:Format(0.25,"##.00%") 傳回:25.00%
,
說明:千位分隔符。實際顯示的字元由本機Windows系統國際設定格式決定。在格式定義中隻需要給出一個千位分隔符。
範例:Format(1000000,"#,###") 傳回:1,000,000
E-E+ e-e+
說明:科學計數法格式。如果格式表達式在E-、E+或e-、e+的右邊至少有一個數字占位符(0或#),數字就以科學計數法格式顯示數字,參數Format中所用的字母E或e在該數字和它的指數之間顯示。右邊的數字占位符數目決定了要在指數中顯示的位數。使用E-或e-可以在負指數前插入一個減号,使用E+或e+可以在正指數前插入一個正号。
範例:Format(1.09837555,"######E-###") 傳回:109838E-5
-+$
說明:顯示一個直接量字元。
範例:Format(2345.25,"$#,###.##") 傳回:$2,345.25
\
說明:反斜杠後的字元以直接量字元顯示。可以用反斜杠将某個特定格式的字元以直接量字元顯示。
範例:Format(0.25,"##.##\%") 傳回:.25%
(8) 用于建立使用者自定義字元串格式的字元
@
說明:字元占位符。如果expression在相應的@位置上有一個字元,就顯示這個字元,否則顯示一個空格。
範例:Format("VBA","\*@\*@@@@@") 傳回:* * VBA
&
說明:字元占位符。如果expression在相應的&位置上有一個字元,就顯示這個字元,否則什麼也不顯示。
範例:Format("VBA","\*&&\*&&&&") 傳回:**VBA
<
說明:用小寫形式顯示所有字元。
範例:Format("VBA","<") 傳回:vba
>
說明:用大寫形式顯示所有字元。
範例:Format("vba",">") 傳回:VBA
!
說明:從左向右處理占位符(預設情況為從右向左處理占位符)。
[程式設計方法和技巧]
(1) 使用沒有格式定義的Format函數格式化數字比使用Str函數格式化數字更好。Format函數與Str函數不同,它會把正數中一般保留用于表示符号的前導空格清除掉。
(2) 可以使用Format函數以1000為機關對數字進行标度,做法是在語句中小數點的左邊用一個千位分隔符(,)表示标度數字的一個千位;可以使用多個千位分隔符。例如:
Format(1000000,"##0,.") 傳回:1000.
Format(1000000,"##0,,.") 傳回:1.
2.6 查找字元串
2.6.1 InStr函數
可使用InStr函數傳回一字元串在另一字元串中的位置,是以,也可以使用該函數确定一個字元串中是否包含有另一個字元串。其文法為:
InStr([Start,]string1,string2[,compare])
其中,參數Start為可選參數,設定查找的起點,如果省略,則從第一個字元的位置開始查找,當指定了參數Compare時,則要指定此參數。參數string1為被查找的字元串,參數string2為要查找的字元串,這兩個參數都是必需的。
如果在String1中沒有找到String2,傳回0;如果找到String2,則傳回String2第一個出現的首字元位置(即1到String1的長度);如果String2的長度為零,傳回Start。
可看看下面的示例:
Sub test()
Dim SearchString, SearchChar, MyPos
SearchString = "XXpXXpXXPXXP" '被搜尋的字元串
SearchChar = "P" '要查找字元串 "P"
'從第四個字元開始,以文本比較的方式找起,傳回值為 6(小寫 p)
'小寫 p 和大寫 P 在文本比較下是一樣的
MyPos = InStr(4, SearchString, SearchChar, 1)
Debug.Print MyPos
'從第一個字元開使,以二進制比較的方式找起,傳回值為 9(大寫 P)
'小寫 p 和大寫 P 在二進制比較下是不一樣的
MyPos = InStr(1, SearchString, SearchChar, 0)
Debug.Print MyPos
'預設的比對方式為二進制比較(最後一個參數可省略)
MyPos = InStr(SearchString, SearchChar) '傳回 9
Debug.Print MyPos
MyPos = InStr(1, SearchString, "W") '傳回 0
Debug.Print MyPos
End Sub
2.6.2 InStrRev函數
也可以使用InStrRev函數傳回一個字元串在另一個字元串中出現的位置,與InStr函數不同的是,從字元串的末尾算起。其文法為:
InStrRev(String1,String2[,[Start[,compare])
參數String1為被查找的字元串,參數String2為要查找的字元串,這兩個參數都是必需的。參數Start為可選參數,設定每次查找開始的位置,若忽略則使用-1,表示從上一個字元位置開始查找。參數Compare為可選參數,表示所使用的比較方法,如果忽略則執行二進制比較。
下面的示例使用了InStr函數和InStrRev函數,相應的結果不同:
Sub test()
Dim myString As String
Dim sSearch As String
myString = "I like the functionality that InsStrRev gives"
sSearch = "th"
Debug.Print InStr(myString, sSearch) '傳回8
Debug.Print InStrRev(myString, sSearch) '傳回26
End Sub
- - - - - - - - - - - - - - - - - - - - - - -
2.7 提取字元/字元串
2.7.1 Left函數
Left函數可以從字元串的左邊開始提取字元或指定長度的字元串,即傳回包含字元串中從左邊算起指定數量的字元。其文法為:
Left(String,CharNum)
其中,如果參數String包含Null,則傳回Null;如果參數CharNum的值大于或等于String的字元數,則傳回整個字元串。
例如,下面的代碼傳回指定字元串的前兩個字元:
strLeft=Left(“This is a pig.”,2)
Left函數與InStr函數結合,傳回指定字元串的第一個詞,例如下面的代碼:
str = "This is a pig."
FirstWord = Left(str, InStr(str, " ") - 1)
2.7.2 Right函數
與Left函數不同的是,Right函數從字元串的右邊開始提取字元或指定長度的字元串,即傳回包含字元串中從右邊起指定數量的字元。其文法為:
Right(String,CharNum)
例如:
AnyString = "Hello World" ' 定義字元串
MyStr = Right(AnyString, 1) ' 傳回 "d"
MyStr = Right(AnyString, 6) ' 傳回 " World"
MyStr = Right(AnyString, 20) ' 傳回 "Hello World"
如果存放檔案名的字元串中沒有反斜杠(\),下面的代碼将反斜杠(\)添加到該字元串中:
If Right(strFileName,1) <> “” Then
strFileName=strFileName & “\”
End If
下面的函數假設傳遞給它的參數或者是檔案名,或者是包含完整路徑的檔案名,從字元串的末尾開始傳回檔案名。
Private Function ParseFileName(strFullPath As String)
Dim lngPos As Long, lngStart As Long
Dim strFilename As String
lngStart = 1
Do
lngPos = InStr(lngStart, strFullPath, "\")
If lngPos = 0 Then
strFilename = Right(strFullPath, Len(strFullPath) - lngStart + 1)
Else
lngStart = lngPos + 1
End If
Loop While lngPos > 0
ParseFileName = strFilename
End Function
2.7.3 Mid函數
Mid函數可以從字元串中提取任何指定的子字元串,傳回包含字元串中指定數量的字元的字元串。其文法為:
Mid(String,Start[,Len])
其中,如果參數String包含Null,則傳回Null;如果參數Start超過了String的字元數,則傳回零長度字元串(“”);如果參數Len省略或超過了文本的字元數,則傳回字元串從Start到最後的所有字元。
例如,下面的代碼:
Str=Mid(“This is a pig.”,6,2)
将傳回文本“is”。
下面的代碼:
MyString = "Mid Function Demo" '建立一個字元串
FirstWord = Mid(MyString, 1, 3) '傳回 "Mid"
LastWord = Mid(MyString, 14, 4) '傳回 "Demo"
MidWords = Mid(MyString, 5) '傳回 "Funcion Demo"
Mid函數常用于在字元串中循環,例如,下面的代碼将逐個輸出字元:
Dim str As String
Dim i As Integer
Str=”Print Out each Character”
For i=1 to Len(str)
Debug.Print Mid(str,i,1)
Next i
2.7.4 Mid語句
Mid語句可以用另一個字元串中的字元替換某字元串中指定數量的字元。其文法為:
Mid(Stringvar,Start[,Len])=string
其中,參數Stringvar代表為要被更改的字元串;參數Start表示被替換的字元開頭位置;參數Len表示被替換的字元數,若省略則全部使用string;參數string表示進行替換的字元串。
被替換的字元數量總小于或等于Stringvar的字元數;如果string的數量大于Len所指定的數量,則隻取string的部分字元。示例如下:
MyString = "The dog jumps" ' 設定字元串初值
Mid(MyString, 5, 3) = "fox" ' MyString = "The fox jumps"
Mid(MyString, 5) = "cow" ' MyString = "The cow jumps"
Mid(MyString, 5) = "cow jumped over" ' MyString = "The cow jumpe"
Mid(MyString, 5, 3) = "duck" ' MyString = "The duc jumpe"
- - - - - - - - - - - - - - - - - - - - - - -
2.8 删除空格
LTrim函數删除字元串前面的空格;
RTrim函數删除字元串後面的空格;
Trim函數删除兩頭的空格。
示例如下:
MyString = " <-Trim-> " ' 設定字元串初值
TrimString = LTrim(MyString) ' TrimString = "<-Trim-> "
TrimString = RTrim(MyString) ' TrimString = " <-Trim->"
TrimString = LTrim(RTrim(MyString)) ' TrimString = "<-Trim->"
' 隻使用 Trim 函數也同樣将兩頭空格去除
TrimString = Trim(MyString) ' TrimString = "<-Trim->"
- - - - - - - - - - - - - - - - - - - - - - -
2.9 傳回字元代碼
Asc函數傳回指定字元串表達式中第一個字元的字元代碼。示例如下:
MyNumber = Asc("A") ' 傳回 65
MyNumber = Asc("a") ' 傳回 97
MyNumber = Asc("Apple") ' 傳回 65
[程式設計方法和技巧]
(1) 在資料驗證中用Asc來決定一些條件,如第一個字元是大寫還是小寫、是字母還是數字。
Private Sub CommandButton1_Click()
Dim sTest As String
Dim iChar As Integer
sTest = TextBox1.Text
If Len(sTest) > 0 Then
iChar = Asc(sTest)
If iChar >= 65 And iChar <= 90 Then
MsgBox "第一個字元是大寫"
ElseIf iChar >= 97 And iChar <= 122 Then
MsgBox "第一個字元是小寫"
Else
MsgBox "第一個字元不是字母"
End If
Else
MsgBox "請在文本框中輸入"
End If
End Sub
(2) 用Asc函數和Chr函數來建立基本加密的方法。
Private Sub CommandButton2_Click()
Dim MyName As String, MyEncryptedString As String
Dim MyDecryptedString As String
Dim i As Integer
MyName = "fanjy"
For i = 1 To Len(MyName)
MyEncryptedString = MyEncryptedString & Chr(Asc(Mid(MyName, i, 1)) + 25)
Next i
MsgBox "您好!我的名字是" & MyEncryptedString
For i = 1 To Len(MyName)
MyDecryptedString = MyDecryptedString & Chr(Asc(Mid(MyEncryptedString, i, 1)) - 25)
Next i
MsgBox "您好!我的名字是" & MyDecryptedString
End Sub
- - - - - - - - - - - - - - - - - - - - - - -
2.10 傳回數值代表的相應字元
Chr函數傳回指定字元碼所代表的字元,其文法為:
Chr(charcode)
其中參數charcode代表字元碼,一般為0~255。例如:
MyChar = Chr(65) ' 傳回 A
MyChar = Chr(97) ' 傳回 a
MyChar = Chr(62) ' 傳回 >
MyChar = Chr(37) ' 傳回 %
[程式設計方法和技巧]
(1) 使用Chr(34)将引号嵌入字元串,如
Chr(34) & sString & Chr(34)
(2) 下面列出了在調用Chr函數時比較常用的字元代碼:
代碼 值 描述
0 Null 相當于vbNullChar常數
8 BS 相當于vbBack常數
9 TAB 相當于vbTab常數
10 CR 相當于vbCr和vbCrLf常數
13 LF 相當于vbLf和vbCrLf常數
34 “” 引号
- - - - - - - - - - - - - - - - - - - - - - -
2.11 使用位元組的函數
VBA中傳回字元串的函數有兩種格式,一種以$結尾,傳回字元串,不需要進行類型轉換,是以速度較快,但如果輸入值是包含Null的Viarant,則會發生運作錯誤;一種沒有$,傳回Viarant資料類型,如果輸入值是包含Null的Viarant,則傳回Null。因而,如果要使得程式運作速度快,則使用帶有$的函數且要避免向這些函數傳遞空值。
- - - - - - - - - - - - - - - - - - - - - - -
2.12 傳回數組的函數
2.12.1 Filter函數
Filter函數傳回一個下标從零開始的數組,該數組包含基于指定篩選條件的一個字元串數組的子集。其文法為:
Filter(sourcearray,match[,include[,compare]])
其中,參數sourcearray必需,是要執行搜尋的一維字元串數組;參數match必需,是要搜尋的字元串;參數include可選,Boolean值,表示傳回子串包含還是不包含match字元串,如果include為True,傳回包含match子字元串的數組子集,如果include為False,傳回不包含match子字元串的數組子集;參數compare可選,表示所使用的字元串比較類型,其設定值為:-1(常數為vbUseCompareOption)表示使用Option Compare語句的設定值來執行比較;0(常數為vbBinaryCompare)表示執行二進制比較;
1(常數為vbTextCompare)表示執行文字比較;
2(常數為vbDatabaseCompare)隻用于Microsoft Access,表示基于資料庫資訊來執行比較。
如果在sourcearray中沒有發現與match相比對的值,Filter函數傳回一個空數組;如果sourcearray是Null或不是一個一維數組,則産生錯誤。
Filter函數所傳回的數組,其元素數是所找到的比對項目數。
[程式設計方法和技巧]
(1) Filter函數也可以過濾數字值。此時,應指定Variant類型的字元串sourcearray,并用數字值給數組指派。
同時,也可以将字元串、Variant、Long或Integer資料傳遞給match。但應注意,傳回的字元串表現為被過濾數字的字元串的形式。例如:
Sub test()
Dim varSource As Variant, varResult As Variant
Dim strMatch As String, i
strMatch = CStr(2)
varSource = Array(10, 20, 30, 21, 22, 32)
varResult = Filter(varSource, strMatch, True, vbBinaryCompare)
For Each i In varResult
Debug.Print i
Next
End Sub
将傳回20,21,22,32
(2) Filter函數可以和Dictionary對象很好地配合使用。可以把Dictionary對象産生的Key值作為一種過濾Dictionary對象成員的快速方法傳遞給Filter函數,如:
Sub test()
Dim i As Integer
Dim sKeys() As Variant
Dim sFiltered() As String
Dim sMatch As String
Dim blnSwitch As Boolean
Dim oDict As Dictionary
Set oDict = New Dictionary
oDict.Add "Microsoft", "One Microsoft Way"
oDict.Add "AnyMicro Inc", "31 Harbour Drive"
oDict.Add "Landbor Data", "The Plaza"
oDict.Add "Micron Co.", "999 Pleasant View"
sKeys = oDict.Keys
sMatch = "micro"
blnSwitch = True
'尋找包含字元串macro(不區分大小寫)的所有鍵
sFiltered() = Filter(sKeys, sMatch, blnSwitch, vbTextCompare)
For i = 1 To UBound(sFiltered)
Debug.Print sFiltered(i) & "," & oDict.Item(sFiltered(i))
Next i
End Sub
2.12.2 Split函數
Split函數傳回一個下标從零開始的一維數組,包含指定數目的子字元串。其文法為:
Split(expression[,delimiter[,limit[,compare]]])
其中,參數expression必需,表示包含子字元串和分隔符的字元串,若expression是一個長度為零的字元串(“”),該函數則傳回一個沒有元素和資料的空數組;參數delimiter用于辨別子字元串邊界的字元串字元,若忽略則使用空格(“ “)作為分隔符,若是一個長度為零的字元串則傳回僅包含一個元素的數組,該元素是expression所表示的字元串;參數limit表示要傳回的子字元串數,-1表示傳回所有的子字元串;參數compare表示判别子字元串時使用的比較方式,其值與Filter函數的設定值相同。
- - - - - - - - - - - - - - - - - - - - - - -
2.13 連接配接字元串
Join函數傳回連接配接某數組中的多個子字元串而組成的字元串,即将數組中的字元串連接配接起來。其文法為:
Join(sourcearray[,delimiter])
其中,參數sourcearray必需,是包含被連接配接子字元串的一維數組;參數delimiter可選,代表在所傳回的字元串中用于分隔子字元串的字元,若忽略則使用空(“ ”)來分隔,若為零長字元串(“”),則所有項目都連接配接在一起,中間沒有分隔符。
- - - - - - - - - - - - - - - - - - - - - - -
2.14 替換字元串
Replace函數傳回一個被替換了的字元串,該字元串中指定的子字元串已被替換成另一個子字元串,并且替換指定次數。其文法為:
Replace(expression,find,replace[,start[,count[,compare]]])
其中,參數expression必需,表示所要替換的子字元串;參數find必需,表示要搜尋到的子字元串;參數replace必需,表示用來替換的子字元串;參數start表示開始搜尋的位置,若忽略,則從1開始;參數count表示進行替換的次數,預設值是-1,表示進行所有可能的替換;參數compare表示判别子字元串時所用的比較方式,與Filter函數的設定值相同。
如果expression的長度為零,Replace傳回零長度字元串(“”);如果expression為Null,則傳回錯誤;如果find的長度為零,則傳回expression的副本;如果replace的長度為零,則傳回删除了所有出現find的字元串的副本;如果start的值大于expression的長度,則傳回長度為零的字元串;如果count為0,則傳回expression的副本。
Replace函數傳回的字元串是從參數start所指定的位置開始到expression結尾已經進行過替換的字元串。
注意:
(1) 如果沒有使用參數count,那麼當替換較短字元串時就要注意,防止形成一個不相關的字元。
(2) 如果start值大于1,傳回的字元串将從start開始,而不是從原有字元串的第一個字元開始。
- - - - - - - - - - - - - - - - - - - - - - -
2.15 反向字元串
StrReverse函數傳回與指定字元串順序相反的字元串,其文法為:
StrReverse(expression)
其中,參數expression是一個字元串,應用StrReverse函數後将傳回與該字元串順序相反的字元串。如果expression是一個長度為零的字元串(“”),則傳回一個長度為零的字元串;如果expression為Null,則産生一個錯誤。
使用字元串函數
不同的類中都定義有字元串函數。這些類包括 Microsoft.VisualBasic.Strings 類和 System.String 類。
使用 Microsoft.VisualBasic.Strings 類中的字元串函數
下列函數是 Microsoft.VisualBasic.Strings 類中定義的字元串函數。
注意:要使用字元串函數,請通過在源代碼開始處添加以下代碼将命名空間 Microsoft.VisualBasic.Strings 導入到項目中:
Imports Microsoft.VisualBasic.Strings
Asc 和 AscW
Asc 函數和 AscW 函數傳回一個整數值,表示與指定的字元相對應的字元代碼。這兩個函數接受任何有效的字元表達式或字元串表達式作為參數。當字元串是輸入參數時,則僅輸入字元串的第一個字元。當字元串不包含任何字元時,将出現 ArgumentException 錯誤。Asc 傳回輸入字元的代碼資料點或字元代碼。對于單位元組字元集 (SBCS) 值,傳回值可以是 0 到 255 之間的數字。對于雙位元組字元集 (DBCS) 值,傳回值可以是 -32768 到 32767 之間的數字。AscW 為輸入字元傳回 0 到 65535 之間的 Unicode 代碼資料點。
示例:
Dim MyInt As Integer
MyInt = Asc("A") ' MyInt is set to 65.
MyInt = Asc("a") ' MyInt is set to 97.
MyInt = Asc("Apple") ' MyInt is set to 65.
Chr 和 ChrW
Chr 函數和 ChrW 函數傳回與指定的字元代碼相關聯的字元。當 CharCode 超出 -32768 到 65535 的範圍時,将出現 ArgumentException 錯誤。
示例:
本示例使用 Chr 函數傳回與指定的字元代碼相關聯的字元。
Dim MyChar As Char
MyChar = Chr(65) ' Returns "A".
MyChar = Chr(97) ' Returns "a".
MyChar = Chr(62) ' Returns ">".
MyChar = Chr(37) ' Returns "%".
GetChar
GetChar 函數傳回一個 Char 值,表示指定字元串的指定索引中的字元。當索引小于 1 或大于指定輸入參數中最後一個字元的索引時,将出現 ArgumentException 錯誤。
示例:
本示例顯示了如何使用 GetChar 函數從字元串的指定索引中傳回字元。
Dim myString As String = "ABCDE"
Dim myChar As Char
myChar = GetChar(myString, 4) ' myChar = "D"
InStr
InStr 函數傳回一個整數,指定一個字元串在另一個字元串中首次出現的起始位置。
示例:
以下示例使用 InStr 函數傳回一個字元串在另一個字元串中首次出現的位置:
Dim SearchString, SearchChar As String
Dim MyPos As Integer
SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".
' A textual comparison starting at position 4. Returns 6.
MyPos = InStr(4, SearchString, SearchChar, CompareMethod.Text)
Join
Join 函數傳回一個字元串,該字元串是通過連接配接數組中包含的子字元串建立的。包含必須連接配接的子字元串的一維數組将作為參數傳遞給 Join 函數。該函數使用 Delimiter、String 作為可選參數來分隔傳回的字元串中的子字元串。當省略 Delimiter 時,将使用空格(“ ”)作為子字元串之間的分隔符。當 Delimiter 是零長度字元串 ("") 時,數組中的子字元串将不使用分隔符,而是直接相連。
示例:
以下示例顯示了如何使用 Join 函數:
Dim myItem(2) As String
Dim myShoppingList As String
myItem(0) = "Pickle"
myItem(1) = "Pineapple"
myItem(2) = "Papaya"
' Returns "Pickle, Pineapple, Papaya"
myShoppingList = Join(myItem, ", ")
LCase
LCase 函數傳回已經轉換為小寫的字元串或字元。隻有大寫字母被轉換為小寫。所有小寫字母和非字母字元均保持不變。
示例:
以下示例使用 LCase 函數傳回字元串的小寫形式:
Dim UpperCase, LowerCase As String
Uppercase = "Hello WORLD 1234" ' String to convert.
Lowercase = LCase(UpperCase) ' Returns "hello world 1234".
LTrim、RTrim 和 Trim
這些函數會傳回一個包含指定字元串的副本的字元串。在使用 LTrim 時,沒有起始空格。在使用 RTrim 時,沒有尾随空格。在使用 Trim 時,既沒有起始空格也沒有尾随空格。
示例:
以下示例使用 LTrim 函數删除字元串變量中的起始空格,使用 RTrim 函數删除字元串變量中的尾随空格,以及使用 Trim 函數删除字元串變量中的起始空格和尾随空格:
Dim MyString, TrimString As String
MyString = " <-Trim-> " ' Initializes string.
TrimString = LTrim(MyString) ' TrimString = "<-Trim-> ".
TrimString = RTrim(MyString) ' TrimString = " <-Trim->".
TrimString = LTrim(RTrim(MyString)) ' TrimString = "<-Trim->".
' Using the Trim function alone achieves the same result.
TrimString = Trim(MyString) ' TrimString = "<-Trim->".
Replace
Replace 函數傳回一個字元串,其中指定的子字元串按指定的次數替換為另一個子字元串。Replace 函數的傳回值是一個字元串,該字元串在 Start 參數指定的位置開始,然後在指定字元串的末尾以 Find 參數和 Replace 參數中的值所指定的替換内容結束。
示例:
本示例示範了 Replace 函數:
Dim myString As String = "Shopping List"
Dim aString As String
' Returns "Shipping List".
aString = Replace(myString, "o", "i")
StrComp
StrComp 函數傳回 –1、0 或 1。這将基于字元串比較的結果。字元串将從第一個字元開始按字母數字順序排列的值進行比較。
示例:
以下示例使用 StrComp 函數傳回字元串比較的結果。如果省略第三個參數,則使用選項比較語句或項目預設設定中定義的比較類型。
Dim MyStr1, MyStr2 As String
Dim MyComp As Integer
MyStr1 = "ABCD"
MyStr2 = "abcd" ' Defines variables.
' The two strings sort equally. Returns 0.
MyComp = StrComp(MyStr1, MyStr2, CompareMethod.Text)
' MyStr1 sorts after MyStr2. Returns -1.
MyComp = StrComp(MyStr1, MyStr2, CompareMethod.Binary)
' MyStr2 sorts before MyStr1. Returns 1.
MyComp = StrComp(MyStr2, MyStr1)
StrConv
StrConv 函數傳回一個字元串,該字元串轉換為輸入參數中指定的值。StrConv 函數将轉換字元串。這種轉換基于 Conversion 參數中的值。Conversion 參數中的值是 VbStrConv 枚舉的成員。
Conversion 參數的設定為:
枚舉成員 說明
VbStrConv.None 不執行轉換
VbStrConv.LinguisticCasing - 使用語言規則而不是檔案系統(預設值)來區分大小寫
- 僅對大寫和小寫字母有效
VbStrConv.UpperCase 将字元串轉換為大寫字元
VbStrConv.LowerCase 将字元串轉換為小寫字元
VbStrConv.ProperCase 将字元串中每個單詞的第一個字母轉換為大寫
示例:
以下示例将文本轉換為小寫字母:
Dim sText, sNewText As String
sText = "Hello World"
sNewText = StrConv(sText, VbStrConv.LowerCase)
Debug.WriteLine (sNewText) ' Outputs "hello world".
StrDup
StrDup 函數傳回一個由指定的字元重複指定的次數而形成的字元串或對象。StrDup 函數具有兩個參數:Number 參數和 Character 參數。Number 參數指定函數必須傳回的字元串的長度。StrDup 函數僅使用 Character 參數中的第一個字元。Character 參數可以是 Char 資料類型、String 資料類型或 Object 資料類型。
示例:
以下示例使用 StrDup 函數傳回由重複字元組成的字元串:
Dim aString As String = "Wow! What a string!"
Dim aObject As New Object()
Dim myString As String
aObject = "This is a String that is contained in an Object"
myString = StrDup(5, "P") ' Returns "PPPPP"
myString = StrDup(10, aString) ' Returns "WWWWWWWWWW"
myString = StrDup(6, aObject) ' Returns "TTTTTT"
StrReverse
StrReverse 函數傳回一個字元串,該字元串将指定字元串的字元順序颠倒過來。
示例:
Dim myString As String = "ABCDEFG"
Dim revString As String
' Returns "GFEDCBA".
revString = StrReverse(myString)
UCase
UCase 函數傳回一個字元串或字元,包含已轉換為大寫的指定字元串。隻有小寫字母被轉換為大寫字母。所有大寫字母和非字母字元均保持不變。
示例:
以下示例使用 UCase 函數傳回字元串的大寫形式:
Dim LowerCase, UpperCase As String
LowerCase = "Hello World 1234" ' String to convert.
UpperCase = UCase(LowerCase) ' Returns "HELLO WORLD 1234".
使用 System.String 類中的字元串函數
以下是 System 命名空間的 String 類中的字元串函數。
注意:要使用字元串函數,請通過在源代碼開始處添加以下代碼将 System.String 命名空間導入到項目中:
Imports System.String
Compare
Compare 函數比較輸入參數中的兩個字元串。通過使用單詞排序規則來執行比較。發現不相等情況或比較完兩個字元串後,比較将終止。
Compare 示例:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = "testexample"
s2 = "testex"
MsgBox(Compare(s2, s1)) 'Returns -1.
MsgBox(Compare(s1, s2)) 'Returns 1.Concat
Concat 函數将一個或多個字元串相連接配接,然後傳回連接配接後的字元串。
Concat 示例:
以下示例顯示了如何使用 Concat 的重載版本:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2, sa(3) As String
sa(0) = "A"
sa(1) = "B"
sa(2) = "C"
s1 = "test"
s2 = "example"
s1 = Concat(s1, s2) 'Returns testexample.
MsgBox(s1)
MsgBox(Concat(sa)) 'Returns ABC.Copy
Copy 函數将指定字元串中的值複制到另一個字元串中。
Copy 示例:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = "Hello World"
'Copy the string s1 to s2.
s2 = Copy(s1)
MsgBox(s2) 'Displays Hello World.Remove
Remove 函數從指定字元串的指定位置開始删除指定數目的字元。Remove 函數有兩個參數。分别是 StartIndex 參數和 Count 參數。Startindex 參數指定開始删除字元的字元串位置。Count 參數指定要删除的字元數。
Remove 示例:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = "Hello World"
'Removes 3 characters starting from character e.
s2 = s1.Remove(1, 3)
MsgBox(s2) 'Displays Hello World.
Substring
Substring 函數從指定字元串的指定位置開始檢索字元串。
Substring 示例:
以下示例将從指定的字元位置開始并按指定的長度來檢索子字元串:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = "Hello World"
s2 = s1.Substring(6, 5) 'Returns World.
MsgBox(s2)ToCharArray
ToCharArray 函數将字元串中的字元複制到 Unicode 字元數組中。
ToCharArray 示例:
以下示例将指定位置中的字元複制到 Character 數組中:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1 As String
Dim ch(10) As Char
s1 = "Hello World"
'Copies the characters starting from W to d to a Character array.
ch = s1.ToCharArray(6, 5)
MsgBox(ch(3)) 'Displays l.ToLower
ToLower 函數采用一個字元串作為參數,然後以小寫形式傳回該字元串的副本。
ToLower 示例:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = "Hello World"
s2 = s1.ToLower() 'Converts any uppercase characters to lowercase.
MsgBox(s2) 'Displays hello world.ToUpper
ToUpper 函數采用一個字元串作為參數,然後以大寫形式傳回該字元串的副本。
ToUpper 示例:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = "Hello World"
s2 = s1.ToUpper() 'Converts any lowercase characters to uppercase.
MsgBox(s2) 'Displays HELLO WORLD.Trim、TrimStart 和 TrimEnd
這些函數會傳回一個包含指定字元串的副本的字元串。使用 Trim 函數時,既沒有起始空格也沒有尾随空格。使用 TrimStart 函數時,沒有起始空格。使用 TrimEnd 函數時,沒有尾随空格。
示例:
以下示例使用 TrimStart 函數删除字元串變量開始處的空格,使用 TrimEnd 函數删除字元串變量末尾的空格,以及使用 Trim 函數删除字元串變量中的起始空格和尾随空格:
' Code is not compiled unless it is put in a Sub or in a Function.
Dim s1, s2 As String
s1 = " Hello World "
s2 = s1.Trim() 'Returns Hello World without any white spaces.
s2 = s1.TrimStart 'Removes the spaces at the start.
s2 = s1.TrimEnd 'Removes the white spaces at the end.