Access课件第十八—十九课 VBA编程基础.doc_第1页
Access课件第十八—十九课 VBA编程基础.doc_第2页
Access课件第十八—十九课 VBA编程基础.doc_第3页
Access课件第十八—十九课 VBA编程基础.doc_第4页
Access课件第十八—十九课 VBA编程基础.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VBA编程基础VBA(Visual Basic Application): 是Microsoft Office系列软件的内置编程语言,VBA是面向对象的程序设计语言。一般Access程序设计在遇到下列情况下需要使用VBA代码:1、创建用户自定义函数(User-defined Function,UDF)。使用UDF,可以使程序代码更加简洁而有效2、复杂程序处理。可以编写选择结构、循环结构等复杂程序处理。3、数据库的事务处理操作。4、使用ActiveX控件和其他应用程序对象。5、错误处理。一、VBA编程环境 1. Visual Basic编辑器(VBE=Visual Basic Editor)是编辑VBA代码的工作界面,VBE窗口主要有标准工具栏、工程窗口、属性窗口和代码窗口等组成。属性窗口工程窗口立即窗口代码窗口标准工具栏工程窗口(工程资源管理器,其中列出了应用程序的所有模块文件)注:工程资源管理器将模块分为:对象、类和标准模块代码窗口(由三部分组成:对象组合框、事件组合框、代码编辑区)进行程序设计的窗口,显示和编辑代码窗口注:可以查看多代码窗口及转换属性窗口(列出了各个所选对象的属性:分“按字母序”和“按分类序”,直接在属性窗口中编辑对象的属性,属于对象属性的“静态”设置方法,以在代码窗口内用VBA代码编辑对象的属性,这属于对象属性的“动态”设置方法)立即窗口(用来进行快速的表达式计算、简单方法的操作及进行程序测试的工作窗口)注: 默认界面及全部界面的操作(工具栏/“视图”菜单) 2、进入VBE编辑界面 对象模块 方式 标准模块 对象模块的操作步骤: 右击 事件生成器 代码生成器 打开事件属性 单击() 代码生成器标准模块的操作步骤 模块对象下 双击模块 模块对象下 “新建”命令 数据库对象下 “工具”菜单 “宏” Visual Basic编辑器注:Alt+F11 进入VBE界面及数据库窗口与VBE之间的转换快捷键3、编写VBA代码语句原则语句书写规则:通常一条语句写在一行;如果一行写不下,可以“_”将语句连续写在下一行(一条语句写在多行),也可以用“:”将几个语句分隔在一行中(多条语句写在一行) 如:A=2:b=3:c=4注:编写完一语句后,如该句中有红色文本显示,则该语句出错注释:分Rem语句和单引号语句,起解释说明作用书写格式::Rem 和 注:注释的语句不会执行!二、VBA编程基础 1、面向对象程序设计的基本概念 对象:客观存在的可相互区分的实体 比如一个人,一台电脑,一辆汽车、都是实体 集合:某一类的对象的实体集,类 对象:张三、李四类:人 属性:就是描述一个对象的特征 比如描述一个人有哪些属性?姓名、身高、性别、年龄,每个对象这样的属性,取值是不同的 属性使用方式:对象.属性=对象名.属性名 方法:就是描述一个对象的行为(即对象所实施的动作)比如说一个人能走路,能跑步.,这些刻画一个对象的动态特征我们就称之为方法。 方法使用方式:对象.行为=对象名.方法名注意:属性是描述对象的静态特征,方法是描述一个对象的动态特征Access中为我们提供了7种对象,此外还提供了DoCmd对象,它的主要功能是通过调用包含在内部的方法实现VBA编程中对Access的操作。例如DoCmd.OpenReport 报表名 事件就是Access窗体或报表及其上的控件等对象可以“识别”的动作(即动作之后发生的事情) 例如鼠标单击等事件过程:对于一个事件我们需要编写相应的代码来反映执行这样的事件会带来什么样的结果!事件过程的形式如下: Private Sub 对象名_事件名() (VB程序代码) End Sub例Private Sub test_Click() MsgBox 你好吗?, vbQuestion, 标题End Sub总结:一个具有某些特色(即:对象的属性);事物(即:对象本身);对这个事物实施了某个动作(即:对象的方法);由此产生了一个结果(即:对象的事件)。2、数据类型和数据库对象 Access数据库系统创建表时涉及的字段数据类型(除OLE和备注外),在VBA中都有相应的数据类型相对应 标准数据类型VBA数据类型 用户自定义数据类型 标准数据类型数据类型类型标识符号字段类型整型Integer%字节/整数/是/否长整型Long&长整数/自动编号单精度数Single!单精度数双精度数Double#双精度数货币Currency货币字符串String$文本布尔型Boolean无逻辑值日期型Date日期/时间变体类型Variant任何 注:1)布尔型数据(Boolean)只有两个值:True和False,布尔型数据转换为数值型时:True转换为-1,False转换为02)日期时间型(Date)必须前后用#封住,#2012-5-15# 日期和时间之间用空格隔开 #2012/5/1421:30:30#3)变体类型数据(Variant):变体数据类型是一种特殊的数据类型,除了定长字符串类型及用户自定义类型外,可以包含其它任何的数据。如Empty(空)、Error(出错)、Nothing(无值)、Null(空值)VBA中规定:如果没有显示声明或使用符号来定义变量的数据类型,则默认为变体类型。例如: dim a as Integer(定义一个Integer型变量a) dim a%dim b (定义变体类变量b) b=10(b是Integer)b=#2009-2-8#(b是Date)b=10.1234(b是Currency) 用户自定义数据类型:应用过程中用户可以创建一个或多个VBA标准数据类型的自己的数据类型定义格式: Type数据类型名 = Type 数据类型名 域名 As As 域名 As As End Type End Type比如说:想定义一个Student的数据类型Type StudentstuNO as String*10 学号,10个长度字符串stuName as String 姓名,变长字符串(没有指定长度)stuSex as Strinnteg*1 一个长度字符串stuAge as Iger 年龄,整型End Type那么此时我们就有了一个新的数据类型,那就是Student类型可以用Dim Public Static 关键字来定义用户类型变量如可以这样定义一个Student类型的变量。Dim Stu as StudentDim a as Integera= 1接下来就是给变量赋值Stu. stuNO=“200901005”Stu.stuName = “张三”Stu.stuSex =“男”Stu.stuAge =21也可以使用With关键字简化程序中重复的部分With Stu.stuNO=“200901005”.stuName=“张三”.stuSex=“男”.stuAge=21 End WithVBA数据库对象类型: 数据库对象Database连接 Connection窗体 Form报表 Report控件 Control查询 QueryDef表 TableDef命令 Command3. 变量 变量:在程序运行时值会发生变化的数据。程序利用变量来保存数据,传送数据,处理数据变量名:变量的名字,由用户定义。每个变量都属于某种数据类型,并在内存中占有一定的内存空间,每个变量在内存中所占有的位置都有一个内存地址,使用地址对变量操作并不方便,所以需要给变量取一个名字称为变量名。在程序运行过程中,使用变量名就可以对变量的值进行存取,不必知道他的真正的地址变量的命名规则: a.以字母开头b.除下划线字符(“_” )外,不能有标点符号(如:!&”)c.最长只能有255个字符 注:一个汉字算一个字符d.不能与VBA关键字重复(dim as )e.不区分大小写,通常采用大写与小写字母相结合的f使用Set关键字来建立控件对象的变量变量的声明:就是使用前,定义变量名称及类型,使系统为变量分配存储空间1) 显示声明:变量先定义后使用定义变量的格式:DimASVarType=Dim As 结构,其中,As后指明数据类型。注意:声明某个变量为某种类型后,该变量只能存储该类型的数据。变量是一个内存区域,我们可以使用赋值语句对变量进行赋值(=)。 例如: dim a (表示定义一个“变体型”变量 a)dim a as Integer(表示定义一个整型变量 a)dim s as string(表示定义字符串s)dim name as String 定义变量name 为字符串类型Name = “ 张三” 2)隐含声明:没有定义而通过一个值指定给变量名,注意:没有声明类型的变量都是Variant类型的。例:Dim a,b a,b为变体类型(variant类型) age = 20 age为变体类型(variant类型) 3)强制声明:在默认情况下,VBA允许在代码中使用未声明的变量,如果在模式设计窗口的顶部“通用-声明”区域中,加入语句,Option Explicit 强制要求所有变量必须先定义才能使用说明:如果用Option Explicit则只能为当前模块设置了自动变量(显式变量)功能,后才能使用变量。如果为所有模块灰启用此功能,方法: “工具”菜单 “选项” 要求变量声明例题:dim a Sub aa() aa表示该过程的名字。 Dim b As Integer, c As Integer 表示定义整型变量 b和c。 b = 10 给变量b赋一个值10。 c = 20 给变量c赋一个值20。 MsgBox b - c+a 输出b-c的值。End Sub 变量的使用范围(作用域) 变量的作用域:在VBA编程中,变量定义的位置和方式不同,则它存在的时间和起作用的范围也有所不同,这就是变量的作用域与生命周期。在Visual Basic中变量的作用域有3 个层次 1)局部范围(local)(定义在模块的过程内部,在子过程和函数过程中定义的或直接使用的变量作用范围都是局部的) 注:子/涵数过程使用Dim、StaticAs关键字则变量就是局部范围2)模块范围(module)(变量定义在模块的所有过程之外的起始位置,运行时在模块所包含的所有子过程和函数过程中可见,在模块的通用说明区域用Dim、Static、Privateas关键字定义的变量都是模块变量)3)全局范围(Public)变量定义在标准模块的所有过程之外的起始位置,运行时在所有类模块和标准模块的所有子过程和函数过程中都可见,在标准模块的变量定义区域,用PublicAs 关键字说明的变量就属于全局变量,注:变量还有一个特性就是变量的生命周期,变量的生命周期是从变量定义语句所在的过程第一次运行,到程序代码执行完毕并将控制权交回调用它的过程为止的时间。要在变量运行时保留局部变量的值,可以用Static关键字代替Dim定义静态变量。静态(Static)变量的持续时间是整个模块执行的时间,但它的有效作用范围是由其定义位置决定的数据库对象的变量Access中建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用。引用窗体或是报表中的控件,它的引用方式是:窗体: Forms! 窗体名称!控件名称 .属性名称报表: Reports!报表名称!控件名称.属性名称= Forms!窗体名!控件名.属性名Repots!报表名!控件名.属性名注:如对象名称中含有空格或标点符号,就要用方括号把名称括起来可以使用Set关键字来建立控件对象的变量例如:Forms!学生管理!编号=“980306”Forms!学生管理!编 号=“980306Dim txtName As Cotrol 定义控件类型变量 Set txtName=Forms!学生管理!姓名 引用窗体控件对象txtName=“张名” 操作对象变量 数组(用来保存相同类型相同的数据集合) 数组是在有规则的结构中包含一种数据类型的一组数据,即数组元素变量。数组变量由变量名和数组下标构成数组有数组名,一个数组有多个数组元素组成,每个数组元素中保存一个数据。要对某一个数组元素中的数据进行存取,必须指定这个元素在数组中的序号(下标,索引),每一个数组元素都可以使用数组名与下标唯一的确定,下标是连续的整数,下标的最小值叫着下标下界,最大值叫下标上界用Dim语句定义数组。 格式:Dim (下标下限 to 下标上限 )数组分为:一维数组、多维数组和动态数组(1) 一维数组(缺省情况下,下标下限为0,数组元素从“数组名(0)”至“数组名(下标上限)”;如使用to选项,则可安排非0下限) 即: Dim array(n) as integer 则数组有n+1个元素 Dim array( n to m ) as integer 则数组有mn+1个元素例:dim a(2 to 5) as integer 表示:a(2)、a(3)、a(4)、a(5) dim a(5) as integer 表示:a(0)、a(1)、a(2)、a(3)、a(4)、a(5)Dim b(10) as Integer 从b(0)到b(10),共11个元素。 (2)多维数组:在数组下标中加入多个数值,并以逗号分开维数组,最多可以定义60维。定义了格式Dim NewArray( n,m) 则数组有 n+1*m+1个元素Dim NewArray(n to m , ,k to L)则数组有 mn+1*L-K+1个元素Dim a(2,3)as Integer 定义二维数组(行和列)注:行:0,1,2(3行)列:0,1,2,3(4列)因此共3*4=12个元素,从a(0,0)到a(2,3)。Dim c(1 to 2,2 to 3)as Integer 注:行:12(2行)列:23(2列)因此共2*2=4个元素,从a(1,2)到a(2,3)。Dim NewArray(5,5,5) As Integer 有6*6*6=216个元素注意: option base 0/1 的使用,Option Base 0(下标从0开始),Option Base 1(下标从1开始)例如:Option Base 0Dim c(2,3,4) as Integer 定义三维数组02(3个)、03(4个)、04(5个),共3*4*5=60个元素。Option Base 1Dim c(2,3,4)as Integer 12(2个)、13(3个)、14(4个),共2*3*4=24个元素(3)动态数组:先用Dim显式定义数组但不能指明数组元素数目,然后用ReDim关键字来决定数组元素数目创建方法:第一步:声明一个没有下标参数的数组。 说明符 数组名()As 类型第二步:引用数组前用 ReDim语句重新定义。ReDim 数组名(下界 to 上界,下界 to 上界)As 类型例 Dim array()as Long 先不分配空间,等使用的时候再分配空间。ReDim array(10,10,10)注:用ReDim定义的数组是动态的,既数组的大小不固定 Repeat Dimension,重复定义在VBA中,模块的声明部分用Option Base 1语句,可以将数组的默认下标下限由0改为1例题:ReDim(Repeat Dimension,重复定义)Dim a(3) As Integer (固定数组,最多有4个元素)Sub xx() Dim a() As Integer 定义动态数组 ReDim a(5) As Integer 分配空间 a(5) = 10 MsgBox a(5) 输出元素a(5) End Sub4、常量:在程序运行期间不会改变的对象 分为符号常量、系统常量和内部常量。常量的类型分为:整数、长整型、单精度、双精度、字符串、货币、布尔型(逻辑性)、日期时间等类型 符号常量使用关键字Const来定义,格式如下: Const 符号常量名称=常量值 = Const 常量名 类型符号=常数表达式 如:Const PI = 3.1415926Const ss = 相信自己,明天是你的MsgBox ss, vbInformation, 系统提示注: 在模块的声明区定义符号常量可以在所有的模块中使用。一般是Const前加Global或Public关键字符号常量定义时不需要为常量指用数据类型,一般要求大写命名例题:Sub aa() Dim a As Integer Const b As Integer = 10 a = 20 b = 20 MsgBox a + b, vbInformation,变量和常量的区别End Sub注:b = 20(错误!常量的值不能改变,常量不能重新赋值)。系统常量:Access系统内部包含有若干个启动时就建立的系统常量,有True、False、Yes、No、On、Off、Null等 查看方法:数据库下 “视图”菜单 “对象浏览器”内部常量:主要作为DoCmd命令语句中的参数,以前缀ac开头,如acCmdSaveAs查看内部常量:“对象浏览器”窗口“工程/库”列表的Access项“类”列表中选择“全局”注:在列表“成员”中选择一个常量后,它的数值将出现在“对象浏览器”窗口的底部,能将这些内部常量的名字作为用户自定义常量或变量的名字。5、常用标准函数常用标准函数:(系统提供的函数,可以直接使用)使用形式如下: 函数名(参数1,参数2,参数3,参数4)参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数常用标准函数的使用1)算数函数Abs() 求绝对值Int()向下取整Fix()取整(大于参数值的第一个负数)Round(,)四舍五入Sqr()开平方根Rnd()产生0,1)之间的随机数(单精度型)(表达式值小于0则每次产生相同的随机数,表达式值大于0则每次产生新的随机数,如果表达式值等于0则每次产生最近生成的随机数,默认是大于0)Int(101*Rnd) 0,101)注:(1)正数:Int和Fix没有区别,都是取整数部分 (2)负数:Int和Fix有区别Int是求小于或等于它的数,Fix是求大于或等于它的数。Int(a)= a = Fix(a)(前提: a0,负数) 2)字符串函数(P214)(1)字符串检索函数 InStr(Str1,Str2)检索子字符串Str2在字符串Str1中最早出现的位置,返回一整数值MsgBox InStr(1,abcABC,A,1),vbInformation,求子串的位置(1)InStr(1,abcABC,A,1):从abcABC中第1个字符开始求A在长串中第一次出现的位置。(2)InStr(2,abcABC,A,1): 从abcABC中第2个字符开始求A在长串中第一次出现的位置。1表示不区分大小写字母,A和a可以看成一个字符。(3)InStr(1,abcABC,A,0):从abcABC中第1个字符开始求A在长串中第一次出现的位置。0表示区分大小写字母,A和a不可以看成一个字符(2)字符串长度检测函数Len(或)(3)字符串截取函数Left()Right()Mid()(4)生成空字符串函数Space() 返回数值表达式的值指定的空格字符数(5)大小写转换函数Ucase()所有的字母变成大写字母Lcase()所有的字母变成小写字母。 (6)删除空格函数LTrim()去掉“前面(左边)”的空格。RTrim()去掉“后面(右边)”的空格Trim() 去掉“前面和后面”的空格注:字符串中间的空格是不能去掉3)日期/时间函数(1)获取系统日期和时间函数 Date() Time() Now()(2)截取日期函数Year()Month()Day()WeekDay(): 一定要注意它们都是要带参数的,参数都是Date()(3)截取时间函数Hour() Minute() Second()一定要注意它们都是要带参数的,参数是Time()(4)日期/时间增加或减少一个时间间隔DateAdd(),第三个参数是Date格式: DateAdd(,) = DateAdd(格式,增加的值,日期/时间)对表达式表示的日期按照间隔类型加上或减去指定的时间间隔值注: 间隔类型参数值表示时间间隔,为一个字符串; 间隔参数值表示时间间隔的数目,正即未来,负为过去(5)计算两个日期的间隔数目DateDiff()格式:DateDiff(, W1,W2) = DateDiff(格式,日期/时间, 日期/时间) 返回日期1和2之间按间隔类型指定的时间间隔数目例题:求一个人在世界活了多少天。MsgBox DateDiff(d, #2/14/1986 9:30:54 PM#, Date)MsgBox DateDiff(d, Date,#4/7/2007#)(6) 返回日期指定时间部分函数DatePart()举例: D = #2005-7-15 10:25:36# N1 = DatePart(“yyyy”,D) N2 = DatePart(“d”,D) N3 = DatePart(“ww”,D)(7)返回包含指定年月日的日期函数DateSerial() 举例:D=DateSerial(2008,2,29) 返回#2008-2-29# D=DateSerial(2008-1,8-2,0)返回#2007-5-31#DateSerial(2008-1,8-5,20-10) :#2007-3-10#DateSerial(2008-1,8-6,0): 上一个月的最后一天 4)类型转换函数 类型转换函数功能就是将数据类型转换成指定的数据类型(1) 字符串转换字符代码函数(求字符的AscII码值) Asc()返回字符串首字符的ASCII码值 Asc(abcd12):求“第一个字符”的AscII码值常用字符的AscII码值(1)A的AscII码值:65B(66)C(67)Z(65+25=90)(2)a的AscII码值:97b(98)c(99)z(97+25=122)(3)0的AscII码值:481(49)2(50)9(48+9=57)(2)字符代码转换字符函数Chr()(AscII码值字符)如:s=Chr(70) 返回字符“F“(3)数字转换成字符串函数Str()将数值表达式转换为字符串即数值字符串注意:当一数字转成字符串时,总会在前头保留一空格来表示正负,表达式值为正,返回的字符串包含一前导空格表示有一正号举例:s = Str(99) 注意前面有一空格len(s) 3 S = Str(-6) 返回“-6”(4)字符串转换成数字函数Val()字符串数值 注意:数字转换时可自动将字符串中的空格、制表符和换行符去掉举例: S = Val(“16”)返回16 S = Val(“3 45”)返回345 S = Val(“34add58”)返回34(5)字符串转换为日期函数DateValue()举例:D = DateValue(“February 29,2004”)返回#2004-2-29#(6)Nz函数:Nz(表达式或字段属性值)当一个表达式或字段属性值为NULL时,函数可返回0、零长度的字符串、或其他指定值6、运算符和表达式 运算符: 运算符是对数据进行加工和处理一些基本的运算可以用简洁的符号表示,这种表示某种运算的符号就是运算符。被运算的对象称为运算量和操作符。即在运算符的两侧的数据运算符按运算量类型的不同分为:算术运算符,逻辑运算符,关系运算符,连接运算符。1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论