《数据处理与程序设计&第5章-VBA基础(上)课件.pptx》由会员分享,可在线阅读,更多相关《数据处理与程序设计&第5章-VBA基础(上)课件.pptx(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 5 章 Excel VBA 基础第一 第一节 节 VBA VBA 及其开发环境 及其开发环境目 录第二 第二节 节 数据类型 数据类型第三 第三节 节 常量 常量与变量 与变量第四节 第四节 运算符 运算符与表达式 与表达式第五节 第五节 程序控制 程序控制结构 结构第六节 第六节 数组 数组第七节 第七节 典型案例 典型案例第一节 VBA 及其开发环境第一节 VBA 及其开发环境VBAVBA Visual Basic for Applications(VBA)是一种标准宏语言,是一种能执行通用的自动化任务的编程语言 可以扩展 Microsoft Office 软件的应用程序功能VBA与V
2、B VBA 是 VB 的一个子集 VBA必须寄生于 Excel 这样的应用程序 VBA 开发的程序必须依赖于Excel 这样的应用程序才能执行VBA 开发环境Visual Basic 编辑器(VBE)是 VBA 的开发环境第二节数据类型第二节数据类型数据类型数据类型 数据类型是编程的基础 从数据处理的角度看,数据类型是指具有相同性质的数据集合及在此集合上的一组操作。可以使用系统预先定义好的基本数据类型 也允许用户自定义数据类型常用数据类型第三节常量与变量第三节常量与变量10常量是指在程序运行期间其值不能发生变化的量。在Visual Basic中,有两种形式的常量直接常量符号常量。符号常量又分为
3、:用户自定义符号常量系统定义符号常量常量11根据数据类型常量分为字符串常量数值常量布尔常量日期常量 直接常量直接常量就是在程序代码中,以直接明显的形式给出的数。例如:”欢迎使用visual Basic”字符串常量,长度为20 12345 数值型常量 True 布尔型常量#11102001#日期型常量12在程序设计中,常用常量命名的方法来取代程序代码中出现的数,这种常量称为符号常量。符号常量在使用前需要使用Const语句进行声明。声明的格式如下:Public|Private Const As=用户自定义符号常量说明::按变量名的命名规则命名。As:可选项,用以说明符号常量的数据类型。可以是Byt
4、e、Boolean、Integer、Long、Currency、Single、Double、Date、String或Variant。一个As子句只能说明一个符号常量。若省略该项,则系统根据表达式的求值结果,确定最合适的数据类型。:由数值常量或字符串常量以及运算符组成。在中不能使用函数调用。13用先前定义过的符号常量定义新符号常量自定义符号常量举例Const Pi=3.14159声明符号常量Pi代表3.14159,单精度类型Const Max As Integer=9声明符号常量Max代表9,整型Const BirthDate=#1/1/01#声明符号常量BirthDate代表2001年1月1日
5、,日期型Const Pi=3.14,Max=9,MyStr=“Hello”用逗号分隔多个符号常量声明Const Pi2=Pi*214 1)如果要使创建的符号常量只作用于某个过程中,则应在该过程内部声明该符号常量。注意2)如果要使创建的符号常量对模块中所有过程都有效,但对模块之外任何代码都无效,则应在模块的声明段中声明符号常量。3)如果要使创建的符号常量在整个应用程序中有效,则应在标准模块的声明段中进行声明,并在Const前面放置Public关键字。在窗体模块或类模块中不能声明Public符号常量。15系统定义符号常量 符号常量的定义可以从“对象浏览器”中获得。使用对象浏览器可以显示包括当前工程
6、及对象库在内的过程、模块、类、属性和方法等的描述信息。选择对象库在“类”列表中选择所需要的符号常量组用鼠标单击某一个符号常量描述框中显示有关该符号常量的定义及描述信息。例:vbBlue 所表示的颜色值为&HFF0000从菜单栏视图中选择“对象浏览器”或(F2)16变量每 个 变 量 都 有 名 字 和 数 据 类 型,通 过 名 字 来 引 用 一 个 变 量,而 通过数据类型来确定该变量的存储方式。变量是指一个有名称的内存单元。分为属性变量和用户自定义变量17VB 变量的命名规则:第一个字符必须是字母。长度不超过255 个字符。不可以包含小数点或者内嵌的类型声明字符。不能使用关键字。不能与过
7、程名或符号常量同名。变量的命名规则例如:合法变量名:strMyString、intCount、MyForm、姓名、性别等非法变量名:1x、a+b、等 关键字:又称保留字,在语法上有固定含义,是语言的自称组成部分,用于表示系统提供的标准过程、函数、运算符、常量等;VB中约定关键字的首写字母为大写。182.变量的声明变量使用之前,一般必须先声明变量名和类型,以便系统为其分配存储单元。固定格式声明隐式声明强制显式声明VB 变量及其类型声明方式19格式说明::可以是VB 提供的各种数据类型或用户自定义类型。As:方括号部分表示该部分可以缺省。缺省时,变量默认为变体类型.Dim:在窗体模块、标准模块或过
8、程中声明变量。Private:变量仅在该模块或过程中有效。Static:在过程中定义静态变量,即使该过程结束,也仍然保留变量的值。Public:标准模块中声明全局变量,使变量在整个应用程序中有效。Global:在标准模块中声明全局变量.Dim|Private|Static|Public|Global As 格式声明20Defbool|DefByte|DefInt|Deflng|Defcur|Defsng|DefDbl|DefDate|DefStr|DefObj|DefVar 字母范围,字母范围.变量名后加一特定符号来表明数据类型:%整型&长整型!单精度型#双精度型 货币型$字符串型 21若变量
9、未经定义而直接使用,VB 会自动建立一个变量。可存放任何类型的数据,如数值、字符串、日期和时间。隐式声明可见,随着所赋值的不同,变量的类型在不断变化.这种方法很方便,但是常常会因为转换过程难以预料,而导致一个难以查找的错误。因此,应该在应用程序中声明所使用的变量的类型。例如:SomeValue=“100”SomeValue=SomeValue 10;SomeValue=“ABC”+SomeValue22 可在窗体模块或标准模块的声明段中加入语句:Option Explicit强制显式声明VB 可采用强制声明功能,使所有变量都必须先声明后使用.这样,若运行时遇到一个未经明确声明的变量名,VB 就
10、会发出错误警告。声明方式:在“工具”菜单中打开“选项”对话框,单击“编辑器”选择“要求变量声明”选项,即可自动插入 Option Explicit 语句.注:Option Explicit 语句的作用范围仅限于语句所在模块.对于需要强制式变量声明的窗体模块、标准模块及类模块,必须将Option Explicit 语句放在这些模块的声明段中。第四节运算符与表达式第四节运算符与表达式24 运算符与表达式VBA 中有以下6 类运算符和表达式:算术运算符与算术表达式 字符串运算符与字符串表达式 关系运算符与关系表达式 逻辑运算符与逻辑表达式 日期运算符与日期表达式 对象运算符与对象表达式用运算符将运算
11、对象(或操作数)连接起来即构成表达式。表达式表示了某种求值规则。操作数可以是常量、变量、函数、对象等,而运算符也有各种类型。25算术运算符与算术表达式 算术运算符用于对数值型数据执行各种算术运算。VB 提供了7 个算术运算符,优先级次序如表所列:优先级 运算符 运算1 乘方2-取负3*乘法/浮点除法4 整数除法5 Mod取模6+加法-减法其中,取负()运算符是单目运算符,其余运算符均为双目运算符(需要两个操作数)。乘方运算用来计算乘方和方根。例:102 10 的平方,结果为100 10(-2)10 的平方的倒数,即1 100,结果为0.01 250.5 25 的平方根,结果为5 8(1/3)8
12、 的立方根,结果为2 223 运算顺序从左到右,结果为以64(-8)(-1/3)错误,当底数为负数时,指数必须是整数乘方运算2 整数除法例:104 结果为2 25.686.99 先四舍五人再整除,结果为3执行整除运算,结果为整型值。参加运算的操作数一般为整型数。当操作数带有小数点时,先被四舍五入为整型数,后整除。27例:10 Mod 4 结果为2 25.68 Mod 6.99 先四舍五人再求余数,结果为5 11 Mod-4 结果为3-11 Mod 5 结果为-1-11 Mod 3 结果为-2取模运算取模运算符Mod 用于求余数,为第一操作数整除第二操作数所得的余数.操作数带小数,先四舍五入取整
13、型数,后求余;运算结果符号取决于第一个操作数。28注意:“&”和“+”这 两 个 运 算 符 的 区 别:“+”运 算 符 两 边 的 操 作 数 应 均 为 字 符串。如 果 都 为 数 值 型,则 进 行 算 术 运 算;如 果 有 一 个 为 字 符 串,另 一 个 为数 值 型,则 出 错。“&运 算 符 两 边 的 操 作 数 不 论 是 数 值 型 的 还 是 字 符 串型 的,都 进 行 字 符 串 的 连 接 运 算,系 统 先 将 数 值 型 操 作 数 转 换 为 字 符 串,然后再进行连接运算。2.3.2 字符串运算符与字符串表达式字符串运算符有两个:“&”、“+”,是将
14、两个字符串连接起来,合并成一个新的字符串。例如:“Hello”&“World”结果为“Hello World”“Check”&123 结果为“Checkl23”“Check”+123 错误29VB 提供的关系运算符:=等于 2=3 False 不等于 23 True 2 23 False=2=3 False=2=3 TrueLike 字 符 串 匹 配“aBBa”Like“a*a”TrueIs 对象引用比较关系运算符与关系表达式关系运算符又称为比较运算符,用于对两个表达式的值进行比较,比较的结果为布尔值True(真)或False(假)。30有关说明:若两个操作数是数值型,按其大小比较。若两个操
15、作数是字符串,则按字符的ASCII 码值从左到右逐一比较。对单精度或双精度进行比较时,应避免直接判断两个浮点数是否相等,而改成对其误差的判断。例如:Abs(A-B)1E-5 关系运算符的优先级相同。“Like”运算符与通配符“?”、“*”、“#”等结合使用,常用于数据库模糊查询。“Is”运算符用于两个对象变量的引用比较。*is Null31例:数学上判断x 是否在区间a,b 内 如写成:a=x=b 则不能完成指定功能 假设a=1,b=3,x=4 VB 在计算:1=x=3 时由左向右计算 先计算 1=4 成立,值为-1 接着计算-1=3 成立,最终结果为True,而我们想要的结果为False 故
16、引入逻辑表达式32 逻辑运算符与逻辑表达式逻辑运算也称布尔运算或逻辑乘.运算符两边的操作数要求为逻辑值.用逻辑运算符连接两个或多个逻辑量组成的表达式称为逻辑表达式或布尔表达式.逻辑表达式的结果仍为逻辑值True或False.当两个操作数均为假时,结果才为假当两个操作数均为真时,结果才为真当操作数为假时,结果为真说明False(38)And(58)Or(58)例子或非运算OrNot运算符Not 运算符为单目运算符,其它为双目运算符.31优先级45XorEqv6 Imp异或同或蕴含当两个操作数不等价时,结果为真当两个操作数值等价时,结果为真如果A则B(38)Xor(58)Eqr(58)Imp(56
17、)TrueFalseTrue33真值表True FalseA Xor BFalseBFalseAFalseTrueTrue False TrueTrue True FalseTrue FalseA EqvBFalseBFalseATrueFalseeTrue False FalseTrue True TrueTrue FalseA Imp BFalseBFalseATrueTrueTrue FalseTrue True TrueFalse34 表达式的运算顺序表达式的运算的先后顺序为:函数运算 算术运算 关系运算 逻辑运算例:a=3,b=5,c=-1,d=7a+b c+d And a=5 Or
18、 Not c 0 Or d 0True8 6 FalseTrueFalse FalseTrueFalseTrue35 常用内部函数VB 提供系统内部函数,允许用户自定义函数过程内部函数分5 类:数学函数 字符串函数 随机函数、格式输出函数 转换函数 日期和时间函数这些函数都带有一个或几个自变量,在程序设计中称为参数。函数运算后返回一个值。函数一般调用格式:()函数的参数可以是常量、变量或表达式,若有多个参数时,参数之间以逗号分隔36 数学函数数学函数用于各种数学运算,主要包括 三角函数 平方根函数 绝对值函数 对数函数 指数函数绝对值函数 Abs(x)返回x 的绝对值例:Abs(3.4)结果为
19、3.4 Abs(-3.4)结果为3.4 平方根函数 Sqr(x)返回x 的平方根,x=0例:Sqr(9)结果为3三角函数 Sin(x)正玄函数 Cos(x)余玄函数 Tan(x)正切函数 Atn(x)反正切函数参数单位为弧度指数和对数函数Exp(x)返回以e 为底的指数函数,即数学中的exLog(x)返回以e 为底的自然对数,即数学中的lnx。VB 没有提供常用对数函数,要想计算常用对数可以换算:例如:Exp(1)、Exp(2*X)、Log(10)。取整函数 Int(x)返回不大于x 的最大值 Fix(x)返回x 的整数部分 例:Int(3.6)=3 Int(-2.3)=-3 Fix(6.5)
20、=6 Fix(-5.6)=-5四舍五入函数 CInt(x)CLng(x)例:CInt(3.6)=4 38随机函数Rnd(x)产生01 之间的单精度随机数。说明:若x0,则以上一个随机数作为种子,产生序列中的下一个随机数;若x=0,则产生与最近生成的随机数相同的数;若省略参数x,则以上一个随机数作为种子,产生序列中的下一个随机数产生N1,N2问随机数,可使用公式:Int(N2-N1+1)*Rnd+N2随机种子生成器:Randomize time392.4.2 字符串函数VBA提供了大量的字符串函数,具有很强的字符串处理能力。1删除空白字符函数 LTrim(s)去掉字符串s 左边的空白字符(即前导
21、空格)。RTrim(s)去掉字符串s 右边的空白字符(即后置空格)。Trim(s)去掉字符串s 左右两边的空白字符。例如:LTrim(”UUUABC”)结果为“ABC”RTrim(”ABCUUU”)结果为“ABC”Trim(”UUUABCUUU”)结果为“ABC”402取子串函数 Left(s,n)取字符串s左边的n个字符 Right(s,n)取字符串s右边的n个字符 Mid(s,p,n)从字字符串s的第p个字符开始取n个字符例:Left(“ABCDE”,2)结果为“AB”Right(“ABCDE”,2)结果为“DE”Mid(“ABCDE”,2,3)结果为“BCD”Mid(“ABCDE”,2,
22、6)结果为“BCDE”3.字符串长度函数 Len(s)返回字符串s的长度例:Len(“ABCDE”)结果为5415生成空格函数 Space(n)返回n个空格例:Space(3)的结果为“UUU”4生成字符串函数 String(n,s)取字符串s的第一个字符构成长度为n的新字符串。例:String(3,”ABC”)结果“AAA”String(3,65)结果“AAA”(字符”A”的ASCII码为65)427字母大小写转换函数 UCase(s)把小写字母转换为大写字母。LCase(s)把大写字母转换为小写字母。例:UCase(”Abc”)结果为ABC”LCase(”ABc”)结果为abc”6搜索予字
23、符串函数 InStr(S,s1,s2,C)在字符串s1中第S个位置开始查找字符串s2出现的起始位置例:InStr(”ABCDE”,”BC”)结果为2 1nStr(”ABCDECDE”,”DE”,)结果为444转换函数用于数据类型或形式的转换,包括整型、实型、字符串型之间以及与ASCII码字符之间的转换。下面介绍常用的转换函数。1将字符转换成ASCII码 Asc(s)返回字符串s中第一个字符的ASCII码。例:Asc(“A”)结果为65 Asc(“ABC”)结果为652.4.4 转换函数2将ASCII码转换成字符 Chr(x)把x的值转换为对应的ASCII字符例:Chr(65)的结果为”A”。3
24、将数值转换成字符串 Str(x)把x的值转换为一个字符串。如果x为正,则返回的字符串前有一前导空格。例:Str(123)的结果为“123”。4将字符串转换成数值 Val(s)把数字字符串s转换为数值。例:Val(“123”)结果为123 Val(“123AB”)结果为123 Val(“.123AB”)结果为.123 Val(”a123AB)结果为0 465转换成逻辑型数据 Cbool(x)非0为True 0为False。例:Cbool(123)的结果为True。6转换成日期型数据 Cdate(x)把数字、字符串转换为日期数据。例:Cdate(“February 20,1999”)结果为99-2
25、-20 Cdate(“4:30:40 PM”)结果为16:30:40&o 和&h 用于定义八进制数和十六进制数。Val()函数:略去了字符串左侧的空格,并转换字符串直至字符串中的非数字字符;不仅略去了字符串中的其他正文和空格,而且略去了数字字符中间的空格,如val(“&o 3 3”)=2748日期和时间函数可以显示系统的日期和时间,提供某个事件何时发生及持续时间长短等信息。常用的日期时间函数有:Now 返回系统日期和时间Date 返回系统日期Time 返回系统时间Day(d)返回参数d中指定月份的第几天WeekDay(d)返回参数d中指定的星期几Month(d)返回参数d中指定的月份Year(
26、d)返回年份Hour(d)返回小时(023)Minute(d)返回分钟(059)Second(d)返回秒(059)Timer 返回从午夜开始到现在经过的秒数 日期和时间函数51格式输出函数可以使数值、日期或字符串按指定的格式输出。其格式为 Format(,)格式输出函数:要格式化的数值、日期或字 符串表达式。:指定表达式的值的输出 格式。格式字符有三类:数值格式、日期格式和字符串格式。格式字符要加引号。5253 其他函数1条件函数 Iif(,)如x1值为真,则返回x2的值,否则返回x3例:Iif(xy,x,y)返回x,y中较大值 Iif(x=60,“Pass”,”Failure”)2选择函数 Choose(n,.)例:Choose(3,”星期一”,”星期二”星期三”星期四”星期五”))的结果为”星期三”。