mid(字符串,从第几个开始,长度) ByRef在[字符串]中[从第几个开始]取出[长度个字符串] 例如mid("小欣无敌",1,3)则返回"小欣无" instr(从第几个开始,字符串1,字符串2) ByVal从规定的位置开始查找,返回字符串2在字符串1中的位置 例如instr(1,"小欣无敌","小")则返回1,instr(2,"小"),则返回0。0表示未找到 InStrRev(字符串1,字符串2,从第几个开始) ByVal从规定的位置开始,从后住前查找,返回字符串2在字符串1中的位置,此处注意,虽是从后住前查找,但是返回的值还是从前往后算的。 例如instrRev("小欣无敌","小",2)则返回2 ; instrRev("小欣无敌","欣",1)则返回0,因为它从"小欣无敌"的第1个字开始往前查找,所以找不到。0表示未找到 left(字符串,长度) ByVal从[字符串]的左边开始返回[长度]个字符 例如Left("小欣无敌,3)则返回"小欣无" right(字符串,长度) ByVal从[字符串]的右边开始返回[长度]个字符 例如Right("小欣无敌",3)则返回"欣无敌" ucase(字符串) ByVal返回[字符串]的大写形式,只对英文字符有效 例如ucase("xiaoXINwuDi")则返回"XIAOXINWUDI" lcase(字符串) ByVal返回[字符串]的小写形式,只对英文字符有效 例如lcase("xiaoXINwuDi")则返回"xiaoxinwudi" asc(字符) Byval返回[字符]的ascii编码,若有多个字符,则只返回首字符的ascii编码,和Chr()函数是一个可逆的过程 例如asc("小")则返回-12127 ; asc("小欣无敌")也返回-12127 chr(ASCii编码) Byval返回[Ascii]编码所代表的字符,和Chr()函数是一个可逆的过程 例如chr(-12127)则返回"小";chr(asc("小"))则返回"小"(这里是为了说明asc和chr的可逆性,例用此特性可以加密文本) trim(字符串) Byval返回去掉了前、后之后的[字符串] 例如trim(" 小欣 无敌 ")则返回"小欣 无敌",中间的空格不受任何影响 string(个数,字符) Byval返回[个数]个[字符] 例如string(3,"小")则返回"小小小",而string(3,"小欣无敌")也返回"小",只有首字符才有效 space(个数) Byval返回[个数]个空格 例如space(5)则返回" " strconv(字符串,转换的类型) Byval将字符串转成指定的类型。常用的类型只有两个,vbwide半角转成全角,vbNarrow全角转成半角 例如strconv("xiao",vbwide)则返回"XIAO",而strconv("XIAO",vbnarrow)则返回"XIAO" ’备注vbwide = 4,vbnarrow = 8 len(字符串) Byval返回[字符串]的长度 例如len("小欣无敌")则返回4 字节操作函数 midb() leftb() rightb() chrb() lenb() UNICODE的ASC码处理 chrw() ascw() 去空格 ltrim rtirm 拆分合并 split() join() 翻转 srereverse() 替换 replace() AscB(String As String) As Byte 返回字符串中第一个字节的值 例如:AscB("坦然")则返回102 AscW(String As String) As Integer 返回字符串中第一个字符的本机字符代码(Unicode或ANSI) 例如:AscW("坦然")则返回22374 ChrW(CharCode As Long) 返回一个包含指定本机字符的字符串(Unicode或ANSI) 例如:ChrW(22374)则返回"坦" Filter(InputStrings,Value[,Include[,Compare]]) 返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。 InputStrings必需的。要执行搜索的一维字符串数组。 Value必需的。要搜索的字符串。 Include可选的。Boolean值,表示返回子串包含还是不包含Value字符串。如果Include是True,Filter返回的是包含Value子字符串的数组子集。如果Include是False,Filter返回的是不包含Value子字符串的数组子集。 Compare可选的。数字值,表示所使用的字符串比较类型。有关其设置,请参阅下面的“设置值”部分。 Compare参数的设置值如下: vbUseCompareOption –1使用Option Compare语句的设置值来执行比较。 vbBinaryCompare 0执行二进制比较。 vbTextCompare 1执行文字比较。 vbDatabaseCompare 2只用于Microsoft Access。基于您的数据库信息来执行比较。 例如: Dim a(3) As String a(0) = "坦" a(1) = "坦然" a(2) = "坦然面" a(3) = "坦然面对" b = Filter(a,"然") 则b(0) = "坦然" b(1) = "坦然面" b(2) = "坦然面对" Join(list[,delimiter]) As String 返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。 list必需的。包含被连接子字符串的一维数组。 delimiter可选的。在返回字符串中用于分隔子字符串的字符。如果忽略该项,则使用空格(" ")来分隔子字符串。如果delimiter是零长度字符串(""),则列表中的所有项目都连接在一起,中间没有分隔符。 例如: Dim a(3) As String a(0) = "坦" a(1) = "坦然" a(2) = "坦然面" a(3) = "坦然面对" b = Join(a,"+") 则b = "坦+坦然+坦然面+坦然面对" LeftB(String,Length As Long) 从一个字符串的左边起返回指定数目的字节 例如: a = LeftB("坦然面对",4) 则a = "坦然" LenB(Expression) 返回存储一个变量所需的字节数 例如:a = LenB("坦然面对") 则a = 8 LTrim(String) 返回无前导空格的字符串的备份 RTrim(String) 返回一个无后缀空格的字符串的备份 例如: a = LTrim("坦然面对") b = RTrim("坦然面对") 则a = "坦然面对" b = "坦然面对" MidB(String,Start As Long,[Length]) 从一个字符串中返回指定数目的字节 例如: a = MidB("坦然面对",3,4) 则a = "然面" MonthName(Month As Long,[Abbreviate As Boolean = False]) As String 返回一个表示指定月份的字符串。 abbreviate可选的。Boolean值,表示月份名是否缩写。如果忽略,缺省值为False,表明月份名不能被缩写。 例如: a = MonthName(5) 则a = "五月" Format(expression[,format[,firstdayofweek[,firstweekofyear]]]) 返回Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。 expression必要参数。任何有效的表达式。 format可选参数。有效的命名表达式或用户自定义格式表达式。 firstdayofweek可选参数。常数,表示一星期的第一天。 firstweekofyear可选参数。常数,表示一年的第一周。 firstdayofweek参数有下面设置: vbUseSystem 0使用NLS API设置。 VbSunday 1星期日(缺省) vbMonday 2星期一 vbTuesday 3星期二 vbWednesday 4星期三 vbThursday 5星期四 vbFriday 6星期五 vbSaturday 7星期六 firstweekofyear参数有下面设置: vbUseSystem 0使用NLS API设置。 vbFirstJan1 1从包含一月一日的那一周开始(缺省)。 vbFirstFourDays 2从本年第一周开始,而此周至少有四天在本年中。 VbFirstFullWeek 3从本年第一周开始,而此周完全在本年中。 示例 a = Format(#4/19/2008 1:01:05 PM#,"yyyy-mm-dd,ddd,hh:mm:ss") a = "2008-04-19,Sat,13:01:05" a = Format(#4/19/2008 1:01:05 PM#,dddd,h:m:s") a = "2008-04-19,Saturday,13:1:5" a = Format(#4/19/2008 1:01:05 PM#,"m-d-yy ampm h/m/s") a = "4-19-08 PM 1-1-5" a = Format(1234567.89,"#,#.#00") a = "1,234,567.890" a = Format(0.12358,"#%") a = "12%" a = Format(0.12358,"#.#0%") a = "12.36%" a = Format(0.12358,"#.#000%") a = "12.3580%" a = Format("TaNrAnMiAnDuI",">") a = "TANRANMIANDUI" a = Format("TaNrAnMiAnDuI",">") a = "tanranmiandui" 总之,Format功能很强大,可替代许多函数。 FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]]) 返回一个货币值格式的表达式,它使用系统控制面板中定义的货币符号。 Expression必需的。要格式化的表达式。 NumDigitsAfterDecimal可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 IncludeLeadingDigit可选的。三态常数,表示小数点前是否显示一个零。 UseParensForNegativeNumbers可选的。三态常数,表示是否把负数值放在园括号内。 GroupDigits可选的。三态常数,表示是否用组分隔符对数字进行分组,组分隔符由计算机的区域设置值指定。 IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits参数的设置值如下: TristateTrue –1 True TristateFalse 0 False TristateUseDefault –2使用计算机区域设置中的设置值。 示例 a = FormatCurrency(1234567.89) a =¥1,567.89 a = FormatCurrency(1234567.89,0) a =¥1,568 a = FormatCurrency(1234567.89,3) a =¥1,567.890 a = FormatCurrency(0.15,vbFalse) a =¥.15 a = FormatCurre FormatDateTime(Date[,NamedFormat]) 返回一个日期或时间格式的表达式。 Date必需的。要被格式化的日期表达式。 NamedFormat可选的。数字值,表示日期/时间所使用的格式。如果忽略该值,则使用vbGeneralDate。 NamedFormat参数的设置值如下: vbGeneralDate 0显示日期和/或时间。如果有日期部分,则用短日期格式显示。如果有时间部分,则用长时间格式显示。如果都有,两部分都显示。 vbLongDate 1用计算机区域设置值中指定的长日期格式显示日期。 vbShortDate 2用计算机区域设置值中指定的短日期格式显示日期。 vbLongTime 3用计算机区域设置值中指定的时间格式显示时间。 vbShortTime 4用24小时格式(hh:mm)显示时间。 示例 a = FormatDateTime(#4/19/2008 2:54:23 PM#,vbGeneralDate) a = 2008-4-19 14:54:23 a = FormatDateTime(#4/19/2008 2:54:23 PM#,vbLongDate) a = 2008年4月19日星期六 a = FormatDateTime(#4/19/2008 2:54:23 PM#,vbShortDate) a = 2008-4-19 a = FormatDateTime(#4/19/2008 2:54:23 PM#,vbLongTime) a = 14:54:23 a = FormatDateTime(#4/19/2008 2:54:23 PM#,vbShortTime) a = 14:54 FormatNumber(Expression[,GroupDigits]]]]) 返回一个数字格式的表达式。 Expression必需的。要被格式化的表达式。 NumDigitsAfterDecimal可选的。数字值,表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 IncludeLeadingDigit可选的。三态常数,表示小数点前是否显示零。 UseParensForNegativeNumbers可选的。三态常数,表示是否把负数值放在圆括号内。 GroupDigits可选的。的三态常数,表示是否用组分隔符对数字分组,组分隔符在计算机的区域设置值中指定。 IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits参数的设置值如下: TristateTrue –1 True TristateFalse 0 False TristateUseDefault –2用计算机区域设置值中的设置值。 示例 a = FormatNumber(-1234567.89,4,vbTrue,vbTrue) a = (1,567.8900) a = FormatNumber(-1234567.89,vbFalse,vbFalse) a = -1234567.8900 FormatPercent(Expression[,GroupDigits]]]]) 返回一个百分比格式(乘以100)的表达式,后面有%符号。 Expression必需的。要格式化的表达式。 NumDigitsAfterDecimal可选的。表示小数点右边的显示位数。缺省值为–1,表示使用计算机的区域设置值。 IncludeLeadingDigit可选的。三态常数,表示小数点前是否显示零。 UseParensForNegativeNumbers可选的。三态常数,表示是否把负数放在圆括号内。 GroupDigits可选的。三态常数,表示是否用组分隔符对数字进行分组,组分隔符在计算机的区域设置值中指定。 IncludeLeadingDigit、UseParensForNegativeNumbers和GroupDigits参数的设置值如下: TristateTrue –1 True TristateFalse 0 False TristateUseDefault –2使用计算机区域设置值中的设置值。 示例 a = FormatPercent(-1234567.89,vbFalse) a = -123456789.0000% a = FormatPercent(-1234567.89,vbTrue) a = (123,456,789.0000%) Replace(expression,find,replacewith[,start[,count[,compare]]]) 返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。 expression必需的。字符串表达式,包含要替换的子字符串。 find必需的。要搜索到的子字符串。 replacewith必需的。用来替换的子字符串。 start可选的。在表达式中子字符串搜索的开始位置。如果忽略,假定从1开始。 count可选的。子字符串进行替换的次数。如果忽略,缺省值是–1,它表明进行所有可能的替换。 compare可选的。数字值,表示判别子字符串时所用的比较方式。 compare参数的设置值如下: vbUseCompareOption –1使用Option Compare语句的设置值来执行比较。 vbBinaryCompare 0执行二进制比较。 vbTextCompare 1执行文字比较。 vbDatabaseCompare 2仅用于Microsoft Access。基于您的数据库的信息执行比较。 示例 a = Replace("坦坦然坦然面坦然面对","然","对") a = "坦坦对坦对面坦对面对" a = Replace("坦坦然坦然面坦然面对","对",5) a = "对面坦对面对" a = Replace("坦坦然坦然面坦然面对",2) a = "坦坦对坦对面坦然面对" RightB(String,Length As Long) 从字符串的右边起返回指定数目的字节 示例 a = RightB("坦然面对",4) a = "面对" Split(expression[,delimiter[,compare]]]) 返回一个下标从零开始的一维数组,它包含指定数目的子字符串。 expression必需的。包含子字符串和分隔符的字符串表达式。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。 delimiter可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的expression字符串。 count可选的。要返回的子字符串数,–1表示返回所有的子字符串。 compare可选的。数字值,表示判别子字符串时使用的比较方式。 compare参数的设置值如下: vbUseCompareOption –1用Option Compare语句中的设置值执行比较。 vbBinaryCompare 0执行二进制比较。 vbTextCompare 1执行文字比较。 vbDatabaseCompare 2仅用于Microsoft Access。基于您的数据库的信息执行比较。 示例 a = Split("坦坦然坦然面坦然面对") a(0) = "坦" ; a(1) = "坦然" ; a(2) = "坦然面" ; a(3) = "坦然面对" a = Split("坦!坦然!坦然面!坦然面对","!") 结果同上。 a = Split("坦!坦然!坦然面!坦然面对","!",2) a(0) = "坦" ; a(1) = "坦然!坦然面!坦然面对" StrComp(string1,string2[,compare]) 返回Variant (Integer),为字符串比较的结果。 string1必要参数。任何有效的字符串表达式。 string2必要参数。任何有效的字符串表达式。 Compare可选参数。指定字符串比较的类型。如果compare参数是Null,将发生错误。如果省略compare,Option Compare的设置将决定比较的类型。 compare参数设置为: vbUseCompareOption -1使用Option Compare语句设置执行一个比较。 vbBinaryCompare 0执行一个二进制比较。 vbTextCompare 1执行一个按照原文的比较。 vbDatabaseCompare 2仅适用于Microsoft Access,执行一个基于数据库信息的比较。 StrComp函数有下列返回值: string1小于string2 -1 string1等于string2 0 string1大于string2 1 string1或string 2为Null Null 示例 a = StrComp("坦","然") a = -1 a = StrComp("面","然") a = 1 a = StrComp("然","然") a = 0 a = StrComp("然",Null) a = Null StrConv(string,conversion,LCID) 返回按指定类型转换的Variant (String)。 string必要参数。要转换的字符串表达式。 conversion必要参数。Integer。其值的和决定转换的类型。 LCID可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。) conversion参数的设置值为: vbUpperCase 1将字符串文字转成大写。 vbLowerCase 2将字符串文字转成小写。 vbProperCase 3将字符串中每个字的开头字母转成大写。 vbWide 4将字符串中单字节字符转成双字节字符。 vbNarrow 8将字符串中双字节字符转成单字节字符。 vbKatakana 16将字符串中平假名字符转成片假名字符。 vbHiragana 32将字符串中片假名字符转成平假名字符。 vbUnicode 64根据系统的缺省码页将字符串转成Unicode。 vbFromUnicode 128将字符串由Unicode转成系统的缺省码页。 示例 a = StrConv("how do you do",vbUpperCase) a = "HOW DO YOU DO" a = StrConv("HOW DO YOU DO",vbLowerCase) a = "how do you do" a = StrConv("how do you do",vbProperCase) a = "How Do You Do" vbWide vbNarrow见原文 a = StrConv("坦然面对",vbUnicode) a = "fW6qb楖[" a = StrConv("fW6qb楖[",vbFromUnicode) a = "坦然面对" StrReverse(string1) 返回一个字符串,其中一个指定子字符串的字符顺序是反向的。 示例 a = StrReverse("坦然面对") a = "对面然坦" WeekdayName(weekday,abbreviate,firstdayofweek) 返回一个字符串,表示一星期中的某天。 weekday必需的。数字值,表示一星期中的某天。该数字值要依赖于firstdayofweek设置中的设置值来决定。 abbreviate可选的。Boolean值,表示星期的名称是否被缩写。如果忽略该值,缺省值为False,表明星期的名称不能被缩写。 firstdayofweek可选的。数字值,表示一星期中第一天。 firstdayofweek参数值如下: vbUseSystem 0使用本国语言支持(NLS) API设置值。 vbSunday 1星期日(缺省)。 vbMonday 2星期一 vbTuesday 3星期二 vbWednesday 4星期三 vbThursday 5星期四 vbFriday 6星期五 vbSaturday 7星期六 示例 a = WeekdayName(5) a = "星期四" 下面一堆东西可以解决长度问题~~~ --------------------------------------------------- VB4.0以后,string类型以UNICODE存放,以ANSI形式写入文件。所以,len和FileLen结果不同。len返回字数,每个中、英文均为1;lenb返回字节数,每个中、英文均为2。 如果需要返回ANSI的字节数,可用如下函数: Public Function LenANSI(strU as string) as long LenANSI = LenB(StrConv(strU,vbFromUnicode)) End function -------------------------------------------------- 在32-bit版本的VB底下,将每一个字符都视为两个Byte,所以 Len("中英Mixed")等于7 LenB("中英Mixed")等于14 但是在很多场合底下,我们希望中文字长度以2计算,英文字母长度以1计算,此时使用的方法如下: '欲计算字串S的长度 N = 0 For I = 1 To Len(S) C = Asc(Mid(S,I,1)) '取得第I个字符组的字符码 If C >= 0 And C <128 Then '英文 N = N + 1 Else '中文 N = N + 2 End If Next 看起来程序有点罗唆,如果您不喜欢这个方法,可以使用Windows API的lstrlen函数,假设假计算S的长度,则API声明式如下: Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long 而调用的叙述则是: n = lstrlen("中英Mixed" + Chr(0)) Print n ' n将等于9 请注意调用lstrlen时必须加上Chr(0),因为此一函数是根据Chr(0)来判断字串的结束。 调用lstrlen除了程序比较简短之外,速度也比我们写VB程序判断中英文字然后计算长度来的快。 1.Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long 2.Private Sub Command1_Click() 3.MsgBox lstrlen("100个苹果" + Chr(0)) 4.End Sub 复制代码 --------------------------------------------------- 有个算中英文混合长度的玩意~~ 1.Private Function prvStringLenth(strString As String) As Long 2.Dim lngI As Long 3.Dim lngLenth As Long 4. 5.prvStringLenth = 0 6.lngLenth = 0 7. 8.If Len(Trim(strString)) > 0 Then 9.For lngI = 1 To Len(Trim(strString)) 10.If Asc(Mid(Trim(strString),lngI,1)) < 0 Then 11.lngLenth = lngLenth + 2 '如果asc码小于0则为汉字 12.Else 13.lngLenth = lngLenth + 1 '大于0则为英文 14.End If 15.Next 16.prvStringLenth = lngLenth 17.End If 18. 19.End Function 复制代码 |