最新WPS办公软件学习教程_免费企业办公软件下载_金山WPS Office官网论坛

 找回密码
 
查看: 10343|回复: 24

[VBA/VBS教程] 【VBA For ET 教材连载系列】十三

[复制链接]

397

主题

72

听众

3057

积分

测试体验团员

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
3
威望
5028
帖子
2011
精华
11

特殊贡献奖 最佳教程奖 活跃会员奖

发表于 2009-6-15 10:20 |显示全部楼层
分享到: 新浪微博 腾讯微博
VBA中最常用的是两数据运算和字符串处理。本课时讲述VBA自带的字符串处理函数的基本语法与实例。
  a* A" S* o, f  G5 V" s  13.1 计字符串处理函数的分类
& S' B9 m) F, w! U) j  VBA中可用于字符串处理的函数包括以下11类:
- o/ p# ~+ ]; Q2 L) C; ]7 b, `7 l  \) G
13-1 内置字符串处理函数
% B2 K4 f# u% b
作用
1 {. t3 G0 |' `2 l5 {
关键字# B5 Z" h; ]& B  _# T' R
Option Compare
7 S* ?5 o6 B0 Q2 }2 h
设置字符串比较规则0 ^6 ?4 N  x: N/ u; u- L
StrComp- _0 B8 M  u: i- W* V' H
比较两个字符串(字符相似判断)
! W( o' _" U/ m, ^( W# t
StrConv' s+ l1 G, ?! w3 U; r4 f+ D
字符串类型转换
* ^; d- R" H7 R8 F+ V7 M
LcaseUcase
  q) \, U4 o2 c' Z  z
大小写变换
  }5 Y; m" u4 }) X1 J1 f
SpaseString
9 L$ f- a$ P$ o/ X
重复字符串
( p3 l; w/ r/ t- l
Len* j- y7 d8 G/ H1 M% @4 L7 W2 U
计算字符串长度
+ K# N" d/ M- D$ C5 d0 W3 o
Format2 ~& x  F/ ~2 O/ C" I! D
设置字符格式
5 u7 C) w- J3 K( {& O
LSetRset
0 i% a: \; s+ F& w- h" s" \1 A& B/ {
重排字符串
, l0 w  v9 u( b0 b
InStrLeftLtrimMidRightRtrimTrim
" o7 L" F9 d: m6 G& Y- r) x
处理字符串
9 {( `6 w1 A. l9 n
Asc、Chr
% |, C' i+ d  r/ N8 _
字符码转换函数
  其中Option Compare严格说来不算函数,它用于指定其它函数的计算规则。5 u; _( m( _4 h2 W6 n
  接下来,对各种函数的功能进行详细分析。2 s& ^! d- g7 @' V$ ]# W5 y
  13.2 StrComp& A- Q$ f# ^- Z. R" A. [
  StrComp函数用于返回两个字符串比较的结果,其语法如下:( T8 \  D: B& v) G# v9 C, _
  语法:StrComp(string1, string2[, compare])
( @- ~" G$ f( w  其中参数一和参数二分别为需要比较的两个字符串,而第三参数表示比较的方式。如果第三参数是Null,将发生错误;如果省略第三参数,由Option Compare的设置决定比较的类型。
4 j  R& a1 \3 X  Option Compare语句必须在写在模块的所有过程之前。它有以下三种类型:
5 ^# A5 |7 G) {) ?1 s- T6 N( \; A  Option Compare Binary——按二进制进行比较,要区分大小写
) e# |0 Y5 L& t  m  Option Compare Text——不区分大小写的文本排序比较
- _+ Z7 w# v6 u! S  Option Compare Database——仅仅Microsoft Access中使用2 U% i% h: U( _" P9 y* m
  使用StrComp函数进行字符串比较时通常不使用Option Compare语句,而是通过第三参数来限制比较方式。其中第三参数有以下四个可选项:9 w7 i3 z& {  Q6 `
  [$ H$ P  N% o8 u
13-2 StrComp函数第三参数的可选常数

1 L1 [! \" `# F5 b
常数
, A4 U$ S% R$ l* a5 S6 J# L! G9 P

  Y! }6 c- O$ y6 ?
描述
; [, V* o! k! W* `/ Y
vbUseCompareOption

) U5 l/ V, e; [. c: ~* [6 N- }( b1 A# H
-1

3 B4 [. U; C0 S
使用Option Compare语句设置执行一个比较。

& U  l# _' ^( h2 X8 ^
vbBinaryCompare

, B, o; w1 N/ Z7 M
0
7 h' w7 ~* G# w3 L/ K! |0 ^
执行一个二进制比较。

& n& d# L, h3 s0 D6 s
vbTextCompare
( R" q* d; H7 u8 z5 ]# W
1

7 L$ I% h4 w' Y$ X$ o1 x
执行一个按照原文的比较。
' H7 k7 k6 c4 K  {6 V, g
vbDatabaseCompare
1 I+ v/ t+ z6 f3 V
2

6 e3 Q4 B& B8 a  i' h1 I) G
仅适用于Microsoft Access,执行一个基于数据库信息的比较。
  K$ b, T1 u( m
  而函数的返回值有以下规则:4 \( s. x) p9 e4 z
  如果string1小于string2StrComp返回-16 D1 _! B# q0 L. h; k
  如果string1等于string2StrComp返回00 p: G2 Q& b! g# \- }9 j
  如果string1大于string2StrComp返回1
+ \  X% w" j  p" w, t5 T4 k  如果string1string2NullStrComp返回Null7 j# L3 [* u+ g
  接下来通过一个实例说明StrComp函数实例对字符比较的方式。
* ]8 L1 z! J' w. @_______________________________________________________% p- m6 y/ d: ]$ w' p; e- o& b: s
Sub StrComp运算()
! l# p& i# V! Y+ N" \  Dim MyStr1, MyStr2, MyComp
; f. `2 _; Y& Q  MyStr1 = "ABCD": MyStr2 = "abcd" ' 定义变量
0 F6 [% n' }& S/ ]  MsgBox StrComp(MyStr1, MyStr2, 1) ' 返回 0
$ @* ?% R9 P: w2 |" R/ K  MsgBox StrComp(MyStr1, MyStr2, 0) ' 返回 -1
( _( ~. r4 l% t! s8 I9 g- g  MsgBox StrComp(MyStr2, MyStr1) ' 返回 1/ d+ A& r' o2 O0 G$ e, S& y7 {
  End Sub

. X+ ?* K4 w+ w_______________________________________________________
1 ^, a1 z: o4 a# W0 b1 d$ A. @& Q' H6 f9 s1 O
  如果需要像工作表函数Exact那样区分大小写而精确比较,那么StrComp函数的第三参数使用0即可。0 p  B9 h1 ]" m- R/ d: G. ^6 n
  13.3 Strconv
* ^) M- x3 n- Y  Strconv函数用于按指定类型转换字符串。其语法如下:
$ Z7 S2 B7 r& l0 J6 f# y  StrConv(string, conversion, LCID)
% H3 h# Y9 Y1 |; H$ ^" f  F  String是指定的字符串,表示对它进行转换,而第二参数Conversion的则表示转换的方式,它有以下可选的常数:
4 B4 K. E: K7 z  13-3 Conversion的常数列表
8 L  m# g# y/ Z: m0 y0 u5 c( w1 C* ]  `; h
: \; S" F* F( g8 a2 M
6 H7 {% v4 a6 Y7 B' a
常数

; Z2 Z$ a2 {7 N  x

/ \+ [* t! U) d% K1 O
说明
9 @) Z4 K3 S' n; Z8 _. Y; e
vbUpperCase

) g$ O9 Y) t4 A7 Y7 @" ~
1

, O8 t6 h8 ?  y% K
将字符串文字转成大写

/ O, K) a9 m) l# k' R* s& o+ r' g. R
vbLowerCase

0 z+ N3 ~" U" O1 c+ M7 r5 X' \
2

! n2 \5 ^5 R  N, @' w
将字符串文字转成小写
- t. Z. S5 U5 X" {$ a
vbProperCase
) m6 b; u3 o1 p3 g* r
3
" _( `8 \( C; Q5 ]7 @; h8 a
将字符串中每个字的开头字母转成大写
& l: O/ G0 T% v
vbWide

5 @& T& J+ e( `$ Z: o$ D6 M( W
4*
+ t/ m/ h9 g; v( Q
将字符串中单字节字符转成双字节字符
, W" j# E, v7 f
vbNarro
% b- ~3 j! @3 w" ~6 }- A/ X
8*

. f6 m/ |* k7 J3 R
将字符串中双字节字符转成单字节字符

" ^) y1 {& f/ H! c( e4 X
vbKatakana
' o  d/ @4 g$ ^2 D/ I7 Y; N( M
16**
3 L6 K4 X% ?! F
将字符串中平假名字符转成片假名字符
" [1 Z: W- b+ P( {
vbHiragana
3 T, {) g! W7 x. c" E
32**
$ V7 h! P  v/ h' y
将字符串中片假名字符转成平假名字符

. D! B1 w$ T9 l1 }' L+ f3 ~
vbUnicode
* A! T3 w6 W) t, \$ [
64

/ `- a* C' y% X# I4 O
根据系统的缺省码页将字符串转成 Unicode

0 b+ d# j% }# c# i, c
vbFromUnicode
1 I) t3 e  Y- T! K. }: Y( ~+ v
##

1 n# b( l! K1 o+ Z
将字符串由 Unicode转成系统的缺省码页
9 q4 V' L  n3 R& I
  从上表可以看出,Strconv函数的转换能力非常强大。接下来通过一个实例加深入对此函数的认识:
/ a: n8 c1 o0 o0 g7 U( D____________________________________________________________
+ ]/ q1 ^9 B: D% V5 v/ H$ {  Sub StrConv运算()
$ g; l6 q9 _  }7 Z, J0 W  MsgBox StrConv("aBCdEFg", vbUpperCase) '---ABCDEFG
' J- N( G+ I1 X2 [  MsgBox StrConv("aBCdEFg", vbLowerCase) '--- abcdefg" J& ]# r+ ^# t/ H' F6 P
  MsgBox StrConv("aBCdEFg", vbProperCase) '---Abcdefg
2 m+ _; _9 c( _* s% B/ m2 A  MsgBox StrConv("aBCdEFg", vbUnicode) '---- A B C D E F G
; R+ v! ~5 L" q% d8 o  End Sub

+ D/ f& z6 }# T  m( {# F_____________________________________________________3 }4 ^. X+ X- a2 M6 U
' d6 ?- Z8 _+ G1 P/ [, u$ u8 e
  13.4 format
6 P7 Z7 r5 k7 A) ?7 w; d  Format函数的功能类似于工作表函数Text,这可以根据用户指定的格式来格式化字符串。它的语法如下:
& l% x' K$ b, j' X7 Y  Format(expression[, format[, firstdayofweek[, firstweekofyear]]])  d1 H3 ]- J& {. _% l" x
  其中第一参数是待格式化的对象,可以是字符串,也可以是单元格引用或者表达式;第二参数用户自定义格式的表达式;第三参数用于定义一星期的第一天是星期几,忽略参数时表示星期日为一周的第一天。第四参数表示一年的第一周的计算方式,通过在11日不是星期一时需要决定是11日是上一年的最后一周还是本年度的第一周。在工作中极少注重第三和第四参数,通常忽略。
9 d6 r8 o' z+ E0 b1 D  以下通过三个案例分别演示Format函数对时间、日期与字符、数字的处理方式。. `* g; `3 I& R3 r4 R
___________________________________________________________________5 x  L" x: ~4 s' \- t4 j* y
  【时间转换$ ~; e# q1 P  r
  
Sub 时间格式()- L$ N. ~$ G6 G' T, C7 U
  MsgBox Format(Time, "Long Time") '长时间格式5 V, h6 _1 y- Q
  MsgBox Format(Now, "short Time") '短时间格式,不含秒7 E$ t1 ]% z2 v8 K* m
  MsgBox Format(Now, "hh:mm:ss AMPM") '显示长时间加上午或者下午/ {! Y$ A& ~2 U" x
  End Sub5 S2 E) J( Y- \& ]4 x. k
【日期】:+ ?" F" y, A, ^0 z, x& p4 B
  Sub 日期格式()
. I7 o# d6 z8 y: w. M  MsgBox Format(Date, "LONG DATE") '长日期格式# H0 c, P1 Z, f8 i
  MsgBox Format(Now, "yy-mm-dd") '年月日均显示两位$ e3 U# K$ S8 n
  MsgBox Format(Date, "AAA YYYY年MM月DD日") '显示星期加年月日  `5 A" u5 s5 f  i/ H
  MsgBox Format(Date, "DDDD") '显示英文星期
9 ~% J! \2 E$ \" [  End Sub
6 u4 U* m0 @% W, O/ @4 U0 l【字符】:% D1 y, z7 t! f- M5 c3 |
  Sub 电话格式() '将电话号码转换成指定的样式* z! O7 C* B: ?' A
  MsgBox Format("075512345678", "(0000) 0000-0000")
2 J( v" o0 Q1 U* \2 d  End Sub

  w& O) n+ q- W& }! ]___________________________________________________________________
1 k. x0 h9 Y9 F# H  o' n# T  
  4 n2 W) R; `: A  x$ n0 R% r
13.1 电话格式
  假设电话号码存在A1单元格,而有可能是带区号的12位电话,有可能是11位的手机号码,需要将它们加以区分的话,那么对Format的第二参数加入一个IIF函数来判断即可。代码如下:- @) X7 G: _/ n0 A: H  }; Y2 O
__________________________________________________________________________________________5 ]0 W2 \4 ?/ ?: C$ ^
1 j$ a6 x' L7 ?" m" s- E+ x
  Sub 电话格式() '电话格式  m4 N$ C+ w# l0 K, x- j+ p
  MsgBox Format([a1], IIf(Len([a1]) <> 11, "座机:(0000) 0000-0000", "手机:00000000000"))
0 x# M; l8 T' [, q3 n7 S$ `  End Sub

; R/ w; `5 X- R; ~__________________________________________________________________________________________
: |4 Q1 m  G5 D0 V
2 Z& s* Z) s. k, I5 L  以上代码的转换结果会在12位电话号前加入“座机:”,且将区号括起来,而11位的手机号则仅仅手入“手机:”,其号码的格式不变。
4 T) Z/ Q! w3 o6 _4 n  正负零值文本判断】:
& R7 c9 N# p" j+ D6 w  M_______________________________________________________% c  ?2 [, O& n! x* C

, @! d1 \" I3 C1 |! ]  Sub 正负零值文本判断()
. N. y* c' @3 H9 B* X0 S  MsgBox Format([a1].Value, "正数;负数;零分;文本")6 K8 y6 H0 _* ]$ R/ {3 w! E& T) {
  End Sub
1 R* [6 f& ~& n+ a) p0 t
_______________________________________________________/ X" `4 O, ]/ ~- N3 ]

9 M: m: ]: K1 z8 P4 i0 T  以上代码的原理是来自于工作表函数Text,当A1的值大于0时返回第二参数中以分号做为间隔符的第一段字符,在本例中是“正数”;如果A1是负数,则返回第二段字符,以上类推。但是工作表函数Text可以使用[>60]这种特性并没有继承下来,它只能在工作表中使用,VBA需要配合IIF函数才能实例了。, Q( k) f, ^1 c6 k, _
  13.5 LCase
/ w9 M- `6 }+ Y  {  LCase函数可以将参数转换成小写的字符串,仅对参数是英文时生效。其语法如下:: P$ f0 P8 _: v3 U
  LCase(string)/ P5 v. W1 C4 k. g
  LCase函数的使用比较简单,功能也较单一。以下过程用于将所英文转换为小写模式:, F0 J, G5 f: j* x* r* A+ h
_______________________________________________________4 {: R# q& Z; p* X, |. ?

+ q5 h/ y, }, H8 M* w7 Q: k! Z; `  Sub 小写()& g+ J. M5 _" `5 o6 q+ |5 M
  MsgBox LCase("Hello World 1234") '--结果为 hello world 12348 h1 w6 g8 d# S
  End Sub

- t6 [3 G: ?3 P; f3 X. j
_______________________________________________________
# T' @3 y1 [* e9 a& m. F' m1 O. j
  13.6 Ucase/ b  z0 A6 S! G8 b
  Ucase函数可以将参数转换成小写的字符串,仅对参数是英文时生效。其语法如下:( m6 y) }2 |, F: X7 w. V
  Ucase (string)
1 m( W( ]/ ]/ F# f5 a( C; }  Ucase函数在使用上和LCase一样,功能较单一。以下过程可以演示Ucase函数对词地转换过程:6 J, I8 U( l# v8 ^" K
_______________________________________________" H$ A7 L) f8 L+ [! X* k2 e% u
Sub 大写()
# h% ^$ X, ]5 l, d  MsgBox UCase("Hello World 1234") '--结果为 HELLO WORLD 1234
9 O; W5 T. Q/ p5 V. j# w  End Sub

  _( q" |. `' y- M. `( u( ~_____________________________________________________
1 d* x8 ]$ j: {) X5 P7 h' z& j! {+ ~: r7 `* g" Q. k$ B. [* G

, G! k: n8 v4 O+ l- {

3 u4 O0 \% h# ?( {: U3 {* @8 R$ c# n3 ^, h0 O& _9 B% S
[ 本帖最后由 wendy   于 2009-12-23 16:13 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,

137

主题

4

听众

914

积分

LV.6

Rank: 6Rank: 6

该用户从未签到

金币
0
威望
1189
帖子
474
精华
0
发表于 2009-6-17 09:29 |显示全部楼层
好好学习,天天向上:)
在线素材插件下载:》点击《
回复

使用道具 举报

1109

主题

48

听众

1万

积分

测试体验团长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 67 天

[LV.6]常住居民II

金币
2228
威望
33169
帖子
13495
精华
2

测试体验官 灯谜超人 世博会馆馆长 WPS粉丝团 最佳管理奖 勤奋版主奖 最佳教程奖 活跃会员奖 解答支持团 测试体验团 重阳节勋章 优秀会员奖 乐于助人奖

发表于 2009-6-17 21:26 |显示全部楼层
函数是一个不太容易理解的地方
WPS测试体验团欢迎您!
QQ群号:208253958 参与测试和体验WPS所有产品线的产品,包含稳定版本,内测版本,开发版,新功能日构建版本等,提交建议或BUG。
章程”、【报道
回复

使用道具 举报

0

主题

0

听众

20

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
20
帖子
20
精华
0
发表于 2009-7-6 11:29 |显示全部楼层
前面十二篇,是基础的东西,学过VB的话,可以很快扫过,感觉从这一篇开始就需要下功夫了,需要接受一些新的东西,VB和WPS的结合……
回复

使用道具 举报

5

主题

0

听众

1842

积分

LV.8

Rank: 8Rank: 8

签到天数: 41 天

[LV.5]常住居民I

金币
347
威望
4997
帖子
488
精华
0
发表于 2010-1-9 14:28 |显示全部楼层
先下载,慢慢消化和做点练习,再与MS对比一下有何不同。
# U1 H# O3 k+ ]# g1 h; t' ?接着看下面的内容,继续学习,谢罗版。
回复

使用道具 举报

0

主题

0

听众

3

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
0
帖子
0
精华
0
发表于 2013-4-12 14:10 |显示全部楼层
谢谢,学习
回复

使用道具 举报

21

主题

36

听众

3144

积分

技术分享团员

Rank: 14Rank: 14Rank: 14Rank: 14

签到天数: 2 天

[LV.1]初来乍到

金币
933
威望
8073
帖子
1041
精华
0

WPS粉丝团 技术分享团 技巧教程分享达人 优秀会员奖 乐于助人奖

发表于 2013-6-1 12:51 |显示全部楼层
VBA  有的学了
回复

使用道具 举报

0

主题

0

听众

312

积分

LV.4

Rank: 4

该用户从未签到

金币
6
威望
838
帖子
66
精华
0
发表于 2013-8-31 23:14 |显示全部楼层
每天一学。
9 l+ G0 [# j) W; \, p9 B
回复

使用道具 举报

0

主题

0

听众

1

积分

LV.1

Rank: 1

该用户从未签到

金币
3
威望
1
帖子
2
精华
0
发表于 2014-12-21 23:41 |显示全部楼层
;;;;;;;;;;;;;;;;;;;;;
回复

使用道具 举报

110

主题

18

听众

2万

积分

LV.17

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

签到天数: 1186 天

[LV.10]以坛为家III

金币
2075
威望
66962
帖子
4077
精华
0

优秀会员奖 活跃会员奖

发表于 2015-4-12 09:58 |显示全部楼层
了解一下           
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 更多账号登录:

快速回帖:

fastpost

WPS论坛更新日志|WPS Office官方论坛     

GMT+8, 2017-11-25 09:40

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部