VBA程序设计基础Word格式.docx
《VBA程序设计基础Word格式.docx》由会员分享,可在线阅读,更多相关《VBA程序设计基础Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
示例:
A=5
B=10
(二)选择结构
选择结构也叫分支结构,选择结构根据某个条件是否成立决定下一步执行的语句或语句块。
常见的选择语句有If…Then…EndIf和SelectCase……EndSelect两组。
1、If…Then…EndIf语句
格式:
If<
条件表达式>
Then
[语句块1]
Else
[语句块2]
EndIf
举例:
IfZongFen>
=60Then
MsgBox“及格”
MsgBox“不及格”
2、SelectCase……EndSelect语句
SelectCase<
Case<
条件1>
条件2>
……
[CaseElse]
[语句块n]
EndSelect
M=Month(Date())
SelectCaseM
Case3To5
MsgBox“春季”
Case6To8
MsgBox“夏季”
Case9To11
MsgBox“秋季”
Case12To2
MsgBox“冬季”
(三)循环结构
循环结构分为“当型循环”和“直到型循环”两种。
前者是当条件满足时执行循环体内的语句,后者是进入循环体直到条件不满足时退出。
VBA提供三类循环结构,即DoWhile……Loop、For……Next和While……Wend。
1、DoWhile……Loop循环
这是VBA中最基本的循环语句,当条件表达式为真时,重复执行循环体内的语句。
DoWhile<
[语句序列1]
[ExitDo]
[语句序列2]
Loop
I=0
N=10
S=0
DoWhileI<
=N
S=S+I
I=I+1
2、Do……LoopWhile循环
当要求循环体至少执行一次才能结束循环,此时,可以使用Do……LoopWhile循环。
Do
[语句序列1]
LoopWhile<
IfN<
0then
End
S=S+N
LoopWhileS<
=1000
3、DoUntil……Loop循环
当条件表达式不满足时,重复执行循环体内的语句。
与DoWhile……Loop意义相反。
DoUntil<
4、Do……LoopUntil循环
执行一次循环体内的语句,然后判断条件是否成立,当条件不成立时继续执行循环体,条件满足则退出。
LoopUntil<
(四)程序实例
1、编程:
任意输入两个数据,判断较大数,并显示出来。
2、编程:
计算水费,如果用户月用水量在7方以下,则按每方1.4元计算,否则,超出部分按每方1.9元计算。
3、编程:
输入一个年份,判断它是平年还是闰年。
4、编程:
输入三个数,找出它们中的最大数和最小数。
(或者按序排列输出)
5、编程:
输入10个同学的成绩,判断他们成绩的等级。
(及格:
60-70,中等:
71-80,良好:
81-95,优秀:
95以上)
6、编程:
计算1+2+3+……+100的和。
7、编程:
计算1+3+5+……+99的和。
8、编程:
计算1-2+3-4+5-……+99-100的结果。
9、编程:
求一元二次方程ax2+bx+c=0的根。
10、编程:
找出1000以内的“水仙花数”。
(水仙花数是一个三位数,它的各位上的数字的立方和,恰好等于它本身。
如153,13+53+33=1+125+27=153)
11、编程:
找出1000以内的“同构数”。
(同构数的特点是平方后得到的数的末尾和自身相同。
如25,252=625)
12、编程:
找出1000以内的素数。
13、编程:
用辗转相除法求任意两个数的最大公约数和最小公倍数。
14、编程:
求6!
15、编程:
求1!
+2!
+3!
+……+6!
16、编程:
找出10000以内的“四朵金花”。
四朵金花是一个四位数,它没一位的四次方和等于它本身,如1634。
三、常量、变量的声明和作用域
1、常量
常量是指在程序运行的过程中,其值不能被改变的量。
如12,-5,3+2,2.1E+5,π等。
常量有直接常量、符号常量(用Const语句声明)、固有常量、系统定义常量(如True、vbRed)等。
声明常量可以使用Const语句,其语法如下:
[Public|Private]Constconstname[Astype]=expression
如:
ConstPIasSingle=3.1415926
参数说明如下:
Public
可选的。
该关键字用于在模块级别中声明在所有模块中对所有过程都可以使用的常数。
在过程中不能使用。
Private
该关键字用于在模块级声明只能在包含该声明的模块中使用的常数。
不能在过程中使用。
constname
必需的。
常数的名称;
遵循标准的变量命名约定
type
常数的数据类型;
可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Date、String或Variant
expression
文字,其它常数,或由除Is之外的任意的算术操作符和逻辑操作符所构成的任意组合。
2、变量和数组
变量是指在程序运行的过程中,其值会因程序的需要而改变的量。
变量实际上是一个符号地址,它代表了命名的存储位置,包含在程序执行阶段修改的数据。
每个变量都有变量名,在其作用域范围内可唯一识别。
使用前可以指定数据类型(即采用显式声明),也可以不指定(即采用隐式声明)。
变量命名规则:
变量名必须以字母字符开头,在同一范围内必须是唯一的,不能超过255个字符,而且中间不能包含句点或类型声明字符。
不要与关键字同名。
声明变量:
虽然在程序设计中,允许使用隐式声明,但是良好的编程习惯要求在程序的前几行对所有的变量进行声明。
声明变量常用的语句是Dim和DefType(模块级)语句。
强制变量声明可以使用OptionExplicit语句。
1、Dim语句格式如下:
Dim变量名As数据类型
2、可以使用Dim语句在一行声明多个变量。
DimIntX,IntY,StrAasString
变量的数据类型:
数据类型
说明
Boolean
布尔型
Byte
字节
Integer
整型
Long
长整型
Currency
货币
Single
单精度
Double
双精度
Data
日期/时间
String
字符串
Object
对象
Variant
变体型
VBA中的类型说明符号有%(Integer)、&
(Long)、!
(Single)、#(Double)、$(String)和@(Currency)。
类型说明符号使用时是作为变量名的一部分,放在变量名的最后一个字符。
用户自定义类型的声明:
用户自定义类型的声明使用Type……EndType语句,其格式如下:
Type<
用户自定义类型名>
<
变量名1>
As<
数据类型1>
变量名2>
数据类型2>
EndType
TypeStuType
StuNameAsString*l0'
定义字符串变量存储一个名字。
StuBirthDateAsDate'
定义日期变量存储一个生日。
StuSexAsInteger'
定义整型变量存储性别
EndType'
(0为女,1为男)
使用:
DimUdasStuType
Ud.StuName="
Xyz"
Ud.StuBirthDate=75/12/17
Ud.StuSex=1
变量的作用域:
变量常用的作用域有Local(局部级)、Private(私有,窗体级,模块级)或Public(全局级)。
本地变量:
仅在声明变量的过程中有效。
在过程和函数内部所声明的变量,不管是否使用Dim语句,都是本地变量。
本地变量具有在本地使用的最高优先级,即当存在与本地变量同名的模块级的私有或公共变量时,模块级的变量则被屏蔽;
私有变量:
在所声明的模块中的所有函数和过程都有效。
私有变量必须在模块的通用声明部分使用“Private变量名As数据类型”进行声明;
公共变量:
在所有模块的所有过程和函数都可以使用。
在模块通用声明中使用“Public变量名As数据类型”声明公共变量。
数组变量:
数组是由一组具有相同数据类型的变量(称为数组元素)构成的集合。
(1)数组的声明
在VBA中不允许隐式说明数组,用户可用Dim语句来声明数组,声明方式为:
Dim数组名(数组下标上界)As数据类型
DimintArray(l0)AsInteger
这条语句声明了一个有11个元素的数组,每个数组元素为一个整型变量。
这是只指定数组元素下标上界来定义数组。
可以使用OptionBase来指定数组的默认下标下界是0或l。
默认情况下,数组下标下界为0。
(2)数组的使用
数组声明后,数组中的每个元素都可以当作单个的变量来使用,其使用方法同相同类型的普通变量。
其元素引用格式为:
数组名(下标值表)
其中:
如果该数组为一维数组,则下标值表为一个范围为[数组下标下界,数组下标上界]的整数;
如果该数组为多维数组,则下标值表为一个由多个(不大于数组维数)用逗号分开的整数序列,每个整数(范围为[数组该维下标下界,数组该维下标上界])表示对应的下标值。
例如可以如下引用前面定义的数组:
intAma
(2)'
引用一数组intAma的第3个元素。
intArray(0,0)'
引用二数组intArray的第1行第1个元素。
例如,若要存储一年中每天的支出,可以声明一个具有365个元素的数组变量,而不是365个变量。
数组中的每一个元素都包含一个值。
下列的语句声明数组curExpense具有365个元素。
按照缺省规定,数组的索引是从零开始,所以此数组的上标界是364而不是365。
DimcurExpense(364)AsCurrency
若要设置某个元素的值,必须指定该元素的索引(即下标值表)。
下面的示例对于数组中的每个元素都赋予一个初始值20。
SubF()
DimC(364)AsCurrency
DimIAsInteger
ForI=0to364
C(intI)=20
Next
EndSub
四、运算符和表达式
1、算术运算符与算术表达式
算术运算符是常用的运算符,用来执行简单的算术运算。
VBA提供了8个算术运算符,表6-7列出了这些算术运算符。
运算符
含义
举例
+
加法运算
3+2,结果为5
-
减法运算
15-2,结果为13
*
乘法运算
2*3,结果为6
/
浮点除运算
5/2,结果为2.5
\
整除运算
5\2,结果为2
^
指数运算
3^2,结果为9
Mod
取模运算
5Mod2,结果为1
取负运算
-(5Mod2),结果为-1
在8个算术运算符中,除取负(-)是单目运算符外,其它均为双目运算符。
单目运算符只需要一个运算数,双目运算符需要两个运算数。
2、字符表达式和连接符
在VBA中,字符采用英文半角的双引号或单引号作定界符,如“123”,此处的“123”不能参与数学运算。
字符连接符有两个,+和号&
号,用&
比用+号安全。
举例如下:
A$=“My”
B$=“Home”
C$=A$+B$
变量C$的结果为“MyHome”。
3、关系运算符、逻辑运算符和逻辑表达式
关系运算符也称比较运算符,用来对两个表达式的值进行比较,比较的结果是一个逻辑值,即真(True)或假(False)。
用关系运算符连接两个算术表达式所组成的表达式叫做关系表达式。
VBA提供了6个关系运算符,如下:
作用
结果
=
相等
3=2
False
>
或>
不相等
3+2<
4
True
小于
10<
100
大于
2>
3
小于或等于
3<
=3
大于或等于
=5
逻辑运算也称布尔运算,由逻辑运算符连接两个或多个关系式,组成一个布尔表达式。
常用的逻辑运算符有4个,如下:
Not
取反,由真变假,或由假变真
And
与运算,两个表达式为真,则结果为真,否则为假
Or
或运算,两个表达式中有一个为真,则结果为真,否则为假
Xor
异或运算,两个表达式
4、对象运算符与对象运算表达式
对象运算表达式中使用!
和.两种运算符,使用对象运算符指示随后将出现的项目类型。
①!
!
运算符的作用是指出随后为用户定义的内容。
使用!
运算符可以引用一个开启的窗体、报表或开启窗体或报表上的控件。
表9-7列出了3种引用方式。
②.(点)运算符
.(点)运算符通常指出随后为MicrosoftAccess定义的内容。
例如,使用.(点)运算符可引用窗体、报表或控件等对象的属性。
Reports!
[发货单]!
[货主].Visible
5、运算符的优先级
(1)=、<
的优先级别相同,<
、>
=、<
=优先级别也相同,前两种关系运算符的优先级别低于后四种关系运算符。
(2)关系运算符的优先级低于算术运算符。
(3)关系运算符的优先级高于赋值运算符(=)。
五、函数
1、数学函数
函数
功能
函数值
Abs(N)
求N的绝对值
Abs(-3)
Cos(N)
求N的余弦
Cos(45*3.14/180)
0.707
Exp(N)
E指数
Exp
(2)
7.389
Int(N)
返回参数的整数部分
Int(123.456)
123
Log(N)
自然对数
Log(2.732)
1
Rnd(N)
返回一个0—1之间的随机数
Rnd()
0—1之间的随机数
Sgn(N)
返回一个数的性质符号或0
Sgn(-5)
-1
Sin(N)
求N的正弦
Sin(45*3.14/180)
0.7068
Sqr(N)
求N的算术平方根
Sqr(25)
5
Tan(N)
求N的正切
Tan(45*3.14/180)
0.9992
2、字符函数
InStr(C1,C2)
返回C2在C1中的位置
InStr(“ABCDE”,“DE”)
LCase$(C)
将C中的字母转换成小写
LCase$(“ABcdE”)
“abcde”
Left($C,N)
返回C中左边的N个字符
Left(“ABCDE”,3)
“ABC”
Len($C)
返回字符C的长度
Len(“ABCDE”)
LTrim$(C)
去掉前导空格
LTrim$(“□□A”+“□□A”)
“A□□A”
Mid$($C,M,N)
从第M个字符起,取出C中的N个字符
Mid$(“ABCDE”,2,2)
“BC”
Right$($C,N)
返回C中右边的N个字符
Right$(“ABCDE”,3)
“CDE”
RTrim$(C)
去掉后置空格
RTrim$(“□□A”+“□□A□□”)
“□□A□□A”
Space$(N)
产生N个空格字符
Space$(3)
□□□
Trim$()
去掉前导和后置空格
Trim$(“□□A”+“□□A□□”)
UCase$(C)
将C中字母转换为大写
UCase$(“ABcde”)
“ABCDE”
3、日期时间函数
Date或Date()
返回当前系统日期(包含年月日),日期型
Year(Date)
返回指定日期的年份部分,数值型
Month(Date)
返回指定日期的月份部分,数值型
Day(Date)
返回指定日期的天数部分,数值型
Hours(Time)
返回指定时间的小时部分,数值型
Minutes(Time)
返回指定时间的分钟部分,数值型
Second(Time)
返回指定时间的秒数部分,数值型
Time或Time()
返回当前时间(包含时分秒)
Now
返回当前的日期和时间
WeekDay()
返回当前的星期
4、转换函数
例子
Asc(C)
返回C中第一个字符的ASCII码,数值型
Asc(“ABC”)
65
Chr(N)
返回ASCII码N对应的字符
Chr(97)
“a”
Str(N)
将N转成C类型
Str(1000)
“1000”
Val(C)
将C转成N类型
Val(“123.5”)
123.5
六、数据类型
类型符号
占用字节
取值范围
整型(Integer)
%
2
-32768~32767
长整型(Long)
&
(不要求)
单精度型(Single)
双精度型(Double)
#
8
字符型(String)
$
不定
0~65400
货币型(Currency)
@
日期型(Date)
无
100-01-01~9999-12-31
布尔型(Boolean)
True或False
对象型(Object)
任何引用的对象
变体型(Variant)
由最终的数据类型而定
字节型(Byte)
0~255
七、常用关键字举例
关键字,又称为保留字,是指VBA中具有特殊意义的符号。
这些关键字具有固定的含义,用户不能更改其拼写方式,在对过程、变量等命名时,不允许使用与关键字相同的拼写。
VBA中有许多关键字,可以分为数组、编译命令、控制流、变换、数据类型、日期与时间、目录和文件、错误信息等多种。
常见关键字举例如下:
Abs
Array
Asc
Bytes
Call
Case
Chr
Const
Date
Day
Dir
Exit
For
Function
If
Me
Randomize
Select
Space
Then
While
*八、MsgBox()函数常量的对应值和返回值
1、作用:
在对话框中显示消息,等待用户单击按钮,并返回一个Integer值,告诉用户单击哪一个按钮。
2、语法:
Msgbox(Prompt[,Buttons][,Title][,HelpFile,Context])
3、参数说明:
Prompt——必需的。
字符串表达式,作为对话框中的消息,最大长度1024个字符。
内容超过一行,可以用回车符Chr(13)和换行符Chr(10)实现分行显示。
Buttons——可选的。
缺省为0,数值表达式是值的总和,包含按钮的数目和形式,图标样式,缺省按钮等。
Title——可选的。
指定对话框的标题栏文字。
HelpFile——可选的。
指定向对话框提供上下文相关帮助的帮助文件。
提供了HelpFile则必须使用Context。
Context——可选的。
数值表达式,指定帮助主题的上下文编号。
常见Buttons参数的常量和对应值
常量
对应值
vbOKOnly
只显示“确定”按钮
vbOKCancel
显示“确定”和“取消”按钮
vbAbortRetryIgnore
显示“终止”、“重试”和“忽略”按钮
vbYesNoCancel
显