资源预览内容
第1页 / 共92页
第2页 / 共92页
第3页 / 共92页
第4页 / 共92页
第5页 / 共92页
第6页 / 共92页
第7页 / 共92页
第8页 / 共92页
第9页 / 共92页
第10页 / 共92页
亲,该文档总共92页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十章VBA程序设计根底n本章要点:n熟习VBA编程环境n掌握VBA语法n掌握VBA的流程控制构造10.1 VBA编程环境n认识VBAnVisual Basic for Applicationn与VB开发工具很类似,包括各种主要的语法构造、函数命令等。n与VB的主要区别是VBA主要面向Office办公软件开发工具加强Word、Excel等软件的自动化才干,提供了很多VB中没有的函数和对象,这些对象都是针对Office运用的。n宏的每个根本操作在VBA中都有相应的等效语句。10.1 VBA编程环境nVBA编程环境:VBE窗口10.1 VBA编程环境nAccess 2019数据库中包含的程序模块可以分为两种类型:n独立程序模块规范模块n绑定型程序模块类模块10.1 VBA编程环境n绑定性程序模块n是指包含在窗体、报表、页等数据库根本对象之中的事件处置过程,这样的程序模块仅在所属对象处于活动形状下有效。n也称类模块。作用范围局限在所属的窗体和报表内部,具有部分特性。10.1 VBA编程环境n绑定模块代码设计步骤:n选中控件的对应事件选事件过程:10.1 VBA编程环境n绑定模块代码设计步骤2:n选中事件过程后点 按钮。10.1 VBA编程环境n编辑独立的程序模块n独立程序模块是指Access2019数据库中的“模块对象。这些模块对象可以在数据库中被任一个对象所调用。n也称为规范模块。普通用于存放公共过程,不如其他任何Access对象相关联。通常为整个运用系统设置全局变量或通用过程,供其他窗体或报表等数据库对象在类模块中运用或调用。n规范模块中的公共变量和公共过程具有全局性,其作用范围为整个运用系统。10.1 VBA编程环境n规范模块的创建步骤:n1.选择模块对象,点“新建10.1 VBA编程环境n规范模块的创建步骤:n2.规范模块界面10.1 VBA编程环境n两种模块:10.1 VBA编程环境nVBE窗口的组成10.1 VBA编程环境n主要按钮引见:n视图切换:从VBE视图切换到Access数据库对象视图。n插入模块:用于插入新模块对象,并置新模块对象为操作目的。n运转:执行模块程序。n中断:中止正在运转的程序,进入设计方式。n重新设置:中止程序n设计方式:在设计方式和非设计方式之间切换。10.1 VBA编程环境n主要按钮的功能:n工程资源管理器:选中当前程序模块。10.1 VBA编程环境n属性窗口:10.1 VBA编程环境n对象阅读器:10.1 VBA编程环境n创建模块n添加过程10.2 模块根底nSub过程nPublic|Private Static Sub 子过程(形参) As 数据类型n子过程语句nExit SubnEnd SubnPublic可以使该过程能被一切模块的一切其他过程调用。nPrivate可以使该过程只能被同一模块的其他过程调用。n在一个过程中也可以调用其他子过程或翻开窗体等10.2 模块根底n子过程的定义:nPublic Sub ccc()nDoCmd.OpenForm LoginnEnd Subn子过程的调用:nCall 子过程实参n或者子过程(实参)nCall ccc()nCcc()10.2 模块根底nFunction函数nPublic|Private Static Function 函数过程名形参AS 数据类型n函数过程语句n函数过程名表达式nExit FunctionnEnd Functionn和Sub过程很类似,但通常都具有前往值。nStatic定义静态函数,函数中定义的值不断保管。nAs 数据类型,定义函数前往值类型。10.2 模块根底n函数定义nPrivate Function ddd(r As Double) As Integern Dim pi As Doublen pi = 3.1415926n ddd = pi * r * rnEnd Function10.2 模块根底n窗体按钮事件中调用模块过程或函数:n用表达式生成器选择10.2 模块根底n表达式生成器选择规范模块函数方法:10.3 VBA面向对象编程根底n属性与方法的援用方式:n对象.属性名,对象.方法名n这里的对象普通采用:父对象类名!子对象名n对于窗体上的控件可以用:me.xx 方式来援用,me代表当前窗体。n例如访问窗体上标签:nForm_模块运用!Lb1.Caption“他好啊nMe.lb1.caption“他好啊n规范模块只能用:父对象类名!子对象名,而窗体模块两种方式都可以运用,引荐运用me.方式。10.3 VBA面向对象编程根底n访问窗体文本框:n访问或设置文本框中的字符串n读:msgboxme.text1.valuen赋值:me.Text1.value“他好啊n设置或者访问文本框被选中内容nMe.text3.setfocusnMe.Text3.SelStart = 2nMe.Text3.SelLength = 2nMsgBox (Me.Text3.SelText)10.3 VBA面向对象编程根底设置文本框的输入掩码:Me.Text3.InputMask = Password“设置文本框的可用性:锁定控件,即只读:Me.Text3.Locked = True禁用控件:Me.Text3.Enabled = true设置文本框焦点:DoCmd.GoToControl (Text3)Me.Text3.SetFocus10.3 VBA面向对象编程根底n访问切换控件Togglen程序判别能否按下n读/赋值:me.Toggle.Valuen值为:true1,false0n该控件较少被运用到10.3 VBA面向对象编程根底n单项选择控件Optionn程序判别选中与否n读/赋值:me.Option1.value=truen值为:true1,false0n复选框Checkn程序判别选中与否n读/赋值:me.check1.valuen值为:true1,false010.3 VBA面向对象编程根底n组合框Combon程序访问选中的内容、选中的序号、遍历整个下拉列表,以及添加和删除内容。n重要属性:nMsgBox (Mebo13.ListIndex),前往组合框被选项的序号,从1开场;没有被选择的初值为1。nMsgBox (Mebo13.Value),前往组合框被选项的值,必需有内容被选择后才干运用。nMsgBox (Mebo13.ListCount),前往组合框中选项数量,可以用它实现对组合框数据的遍历。10.3 VBA面向对象编程根底n组合框下拉列表值集合:mebo13.ItemData(i),前往i序号位置列表项值。n组合框特征属性:n手动输入的文本:mebo13.Text,可以结合按键事件,将手动输入的内容添加到组合框中。n这个属性是列表框所没有的。n组合框重要方法:nMebo13.AddItem (“ccc),对组合框添加新下拉项,参数是下拉项的值,即显示出的字符串。nMebo13.RemoveItem (3),删除组合框中指定序号位置的下拉项。10.3 VBA面向对象编程根底n列表框Listn除了外观方式外,常用属性方法与组合框大体类似。n特征属性:n多重选择属性:Me.List18.MultiSelect,值是0,1,2,但是运转只读属性,只能在运转之前设置。n判别列表项能否被选中属性:Me.List18.Selected(i),前往对应序号的列表值能否被选中。10.3 VBA面向对象编程根底n图片框imagen普通选择链接方式显示图片,图片显示用缩放。n动态更改图片:nMe.Image22.Picture = “E:教学资源1.jpg,要给出图片的途径。10.3 VBA面向对象编程根底n分页控件选项卡控件n重要属性:nPages属性,主要经过它指定新当前页,修正页的标题、隐藏和显示指定页。nMe.xxk.Pages.Item(2).SetFocusnMe.xxk.Pages.Item(1).Caption = ccnMe.xxk.Pages.Item(0).Visible = False10.3 VBA面向对象编程根底nAccess运用程序内置对象nApplication对象,包含大量的属性、方法和子对象,部分全局性操作经过它完成。调用时先输入“Application.即可显示其包含的各个子内容。nDocmd对象,是Application的一个子对象。主要功能是经过调用Access内置的方法,在VBA中实现特定的操作。调用时先输入“Docmd.即可以选用其下属子属性和方法。该对象后续内容将大量运用。10.4 VBA编程根底nVBA程序书写规范n不区分大小写,但是标点符号、括号必需是半角英文格式。一个变量或者函数名第一次定义或者运用后,其后程序将自动按照第一次定义或运用除格式显示。n语句书写,普通一句一行,假设一行写不下,可以在要续行的行尾用续行符空格+_,然后在下一行续写语句代码。n注释语句:用Rem开头或者 “开头一行表示注释。10.4 VBA编程根底n1.VBA中的根本数据类型n字节型,关键字Byte,占1个字节,在0255内取值。n主要用于存储一些小型整数。nDim i As BytenDim x, y, z As Byteni=100nX=In没有表示符号10.4 VBA编程根底n逻辑型,关键字Boolean,占2字节,取True,False。0为false,非0为True,如-1。n主要用于存储一些逻辑运算结果nDim x as booleannX=truenX=0nX=1000nX=-199n常量没有特殊表示符号10.4 VBA编程根底n整型,关键字Integer,占2字节,取3276832767之间。n最常用的整型。nDim I as integerni=100ni=1+1n其常量用表示,如99。10.4 VBA编程根底n长整型,关键字Long,占4字节,取值范围在正负20亿之间取值。n主要用于存储特别大的整型数值。nDim x as longnX=20199n其常量用&表示,如99&等。10.4 VBA编程根底n单精度型,关键字Single,占4字节,在正负10-45之间取值。nDim salary as singlenSalary=3000n保管小数n其常量用!表示,如100.89!10.4 VBA编程根底n双精度数,关键字Double,占8个字节,比单精度数更大的表达才干。nDim distance as DoublenDistance=300000n最常用的浮点数表示类型。可以兼容一切其他数值类型。n其常量用表示,如200.910.4 VBA编程根底n货币型n关键字:Currency,占8字节,15位整数,4位有效小数。nDim money as CurrencynMoney=99999999.9999n其常量标志为,如199。10.4 VBA编程根底n日期型包括时间,实践是日期时间类型n关键字Data,占8字节nDim today as DatenToday=Now 得到当前日期和时间nToday=Date 得到当前日期nTodayTime 得到当前时间n日期常量必需用#括起来,如#10-11-2019#10.4 VBA编程根底n对象型n关键字:Object,占4个字节,可以指向任何对象。n普通不生成这种通用对象类型,而是根据需求生成公用的对象。10.4 VBA编程根底n字符型n关键字:String,最多可以存放64K字符。n常量表示字符$,如“hello!$n字符和字符串一样表示方式,如A“,AB,只需一个字符的字符串就可以作为字符。这点和C+不同。n长度为0的字符串为空串。10.4 VBA编程根底n变长类型n类型关键字:Varient,可以存储任何类型。n默许情况下,没有定义数据类型的变量都属于Varient类型。函数没有定义前往值类型时,默许也是Varient类型。10.4 VBA编程根底n用户自定义类型n如构造nPrivate|Public Type 数据类型名n元素1 As 数据类型n元素2 As 数据类型nnEnd Typen然后nDim x as 自定义类型名nX.元素1.10.4 VBA编程根底n变量、常量、数组nVBA中运用变量可以不需求阐明就直接运用。nA100n也可间接显式定义nA100,是整型的标志,所以A为整型。n最常用就是dim语句定义。10.4 VBA编程根底n变量、常量、数组n值常量n100,100,True等等。n常值变量nConst PI3.1415926n固有常量n系统曾经定义的环境常量10.4 VBA编程根底n数组nVBA中不允许隐式阐明数组,必需先定义后运用。nDim x(10) as integer,普通1维数组nDim y(-2 to 3) as integer,下标2开场的数组nDim z(3,5) as integer,2维数组nDim w() as integer ,动态1维数组。动态数组可以反复运用Redim重新确定大小。如:Redim w(10),重新定义时可以用Preserve标志保管原有值。Redim Preserver W20,这样前面10个值得以保管,否那么原有数据全部丧失。Preserve不能改动维数。n默许情况下数组下标从0开场,上标n1。10.4 VBA编程根底n数据库对象变量n可以定义变量代表对应数据库对象上各种控件nDim myform as controlnSet myform=Forms!Form_登录!txtUsernamenVB或VBA中Set的作用就是让变量指定对象10.4 VBA编程根底n运算符与表达式n一、算术运算符运算符 名称优先级表达式例子指数运算 1XY-取负数2X/浮点除法 3X/Y整除4XYMod求余数5X MOD Y其他还有(加)、-(减)、*(乘)10.4 VBA编程根底n字符运算符n,字符串衔接符号,将两个字符串衔接成一个新字符串。n&,将不同数据类型衔接到字符串上。n例如:“Access2019“nAccess“ & 2019n“2+3 & “=“ & (2+3)10.4 VBA编程根底n关系运算符运算符运算含义表达式例子 结果Is对象引用比较 A is nothingLike字符串匹配”ac“ like “*c”trueBetweenAnd介于某个范围之间Between 10 and 90、=、=、=、10.4 VBA编程根底n逻辑运算符nNot,逻辑非,原来假结果为真。nAnd,逻辑与,两个结果都为真结果为真。nOr,逻辑或,两个之一为真结果为真。nXor,异或,两个表达式不一样结果时真。nEqv,等价,两个表达式一样结果时,结果真。nImp,蕴涵,当第一个表达式为真,且第二个表达式为假,那么值为假,否那么为真。10.4 VBA编程根底n系统内置函数n内置函数按功能可以分为:数学函数、字符函数、日期函数和格式输出函数。n数学函数nAbs(数学表达式),前往数值表达式的绝对值。nFix(数值表达式),前往数值表达式的整数部分,假设参数为负值,前往大于参数值的第一个负数。nInt(数值表达式),前往数值表达式的整数部分,假设参数为负数,前往小于等于参数值的第一个负数。nExp(数值表达式),求数值表达式为底的指数函数。10.4 VBA编程根底n数学函数nLog(数值表达式),以e为底的自然对数。nSqr(数值表达式),计算数值表达式的平方根。nSgn(数值表达式),前往一个Variant(Integer),指出参数的正负号。nRound(数值表达式),对操作数四舍五入取整。nRnd(产生随机数),产生01之间的数。10.4 VBA编程根底n转换函数nAsc(字符表达式),前往字符的Ascii码。nChr(数值),Ascii值转换成对应字符。nLcase(字符串表达式),全部转换为小写。nUcase(字符串表达式),全部转换为大写。nStr(数值表达式),将数值表达式转换为字符串。nVal(字符串表达式),将数字字符串转为数值型数据nDateValue(字符串表达式),将字符串转换为日期nHex(数值表达式),十进制转化成十六进制。nSpace(数值表达式),前往指定长度空格字符串。nVBA中还有一些C开头的类型转换函数,Cint,Csng,Cstr10.4 VBA编程根底n字符串函数nInstr(start,str1,str2,compare),字符串检索函数,检索字符串Str2在字符串Str1中最早出现的位置,前往一整数。nStart为数值式,可选参数。nCompare是比较方式:0作二进制比较,1作不区分大小写的文本比较,2作基于数据库中包含信息的比较。n假设Str1串长度为0或Str2检索不到,前往0;假设Str2串长为0,前往Start的值。10.4 VBA编程根底nLeft(字符串表达式或变量,N),从字符串左边截取N个字符。假设N为0,前往长度为零长度字符串;假设N大于或等于字符串长度,前往整个字符串。nRight(字符串表达式或变量,N),从字符串右边起截取N个字符。nMid(字符串表达式,N1,N2),从字符串左边第N1个字符起截取N2个字符。10.4 VBA编程根底nLtrim(字符串表达式或变量),删除字符串的开场字符。nRtrim(字符串表达式或变量),删除字符串的尾部空格字符。nTrim(字符串表达式或变量),删除字符串的开场和尾部空格。10.4 VBA编程根底nLen(字符串表达式或变量),前往字符串的长度。n这里采用Unicode编码处置方式,因此前往的是字符的数量。如“他好123!前往6。n对于数组变量,前往长度是定义长度。nLenB(字符串表达式或变量),前往字符串所占字节数。n普通是2倍Len结果10.4 VBA编程根底n日期/时间函数nDate()或Date,前往当前系统日期nTime()或Time,前往当前系统时间nNow,前往当前系统的日期和时间nYear/Month/Day/Weekday(日期表达式)nHour/Minute/Second(时间表达式)10.4 VBA编程根底n日期时间函数nDateAdd(间隔目的,间隔值,日期表达式)nDateDiff(间隔目的,日期1,日期2nDatePart(间隔目的,日期表达式)n间隔目的:“yyyy表示年,“q季度,“m月,“y一年的天数,“d天,“w一周的天数,“ww周,“h小时,“n分钟,“s秒。nDateSerial(表达式1,表达式2,表达式3),组合成一个日期。10.4 VBA编程根底n格式输出函数nFormat表达式,格式符)n主要完成对数值、日期、字符串表达式按特定的格式输出。10.4 VBA编程根底n其他常用函数nInputBox函数n格式:InputBox(提示文字,标题,默许值n作用:出现一个输入对话框,能获得用户的输入信息。10.4 VBA编程根底nMsgboxn格式:msgbox(提示文字,按钮图标,标题)n其中按钮和图标参考教材215页。n作用:给用户弹出一个对话框,进展信息提示,能让用户对某些事件进展判别处置,能记录用户点击的对话框按钮。按钮前往值参考216页表格。n它是VBA中最常用的系统函数,系统中大量提示信息都是经过msgbox实现。10.4 VBA编程根底nIIF函数n格式:IIF条件表达式,表达式1,表达式2n作用:类似C+中?:运算符,更具条件,在表达式1和表达式2中选择一个作为前往值。条件为真前往前者,价前往后者。n是IF。Else的简写函数表现。10.4 VBA编程根底nSwitch函数n格式:Switch(条件1,表达式1,条件2,表达式2,.)n作用:该函数用于多条件选择,是Select多分支构造的函数表现。从左向右判别,直到一个条件成立为止,前往对应条件后的表达式。n假设一切条件都不成立,前往null,空值10.4 VBA编程根底nChoose()函数n格式:Choose(数值表达式,表达式1,表达式2,)n作用:类似Switch函数,不过这里没有条件。数值表达式值充任一个条件,假设它界于1,2间,前往表达式1,界于2,3间前往表达式2,依此类推。10.4 VBA编程根底nNz()函数n格式:Nz(表达式或字段树型值,规定值)n作用:假设表达式值为Null,那么前往0、“或者一个自定义的前往值。n很有用的函数,特别在数值运算中。n字符串运算中,可以用“拼接来消除null,nNull & “=“n相关函数:IsNull表达式10.4 VBA编程根底nDCount()函数n格式:DCount(表达式,记录集合,条件式)n表达式:用户标识要统计其记录数的字段。n记录集合:字符串表达式,可以是表的称号或查询的称号n条件式:用于限制DCount函数的数据范围,类似Sql语句中的Where条件。n作用:前往指定记录集合中的记录数。nMe.Text1=Dcount(“xh,学生,xb=男)n可以在宏、VBA、查询表达式或计算控件中运用。10.4 VBA编程根底nDoAvgn用于计算指定记录集合中某个字段列数据的平均值。nDsum()函数n用于汇总指定记录集合中某个字段列数据。nDlookup函数n从指定记录集合检索特定字段的值。非常有用的函数,比如登陆验证等等场所。n留意:以上3个函数格式上类似DCount函数,但在记录集合没有记录或者没有符合条件的记录时,前往Null。10.4 VBA编程根底n案例:登陆验证nUID = Me.UIDnPWD = Me.PWDnpwd1 = DLookup(口令, UserInfo, 用户名= & UID & )nIf IsNull(PWD) ThennMsgBox (没有这个用户)nElsenIf PWD = pwd1 ThennMsgBox 祝贺他登陆胜利!nElsenMsgBox 口令不正确nEnd IfnEnd If10.4 VBA编程根底n常用数据格式判别函数nisArray(变量),判别变量能否为一个数组。nIsDate (表达式),判别变量能否可以转换为日期型。nIsEmpty (变量),判别变量能否是为空值。nIsError (表达式),判别表达式能否为一个错误。nIsNumeric (表达式),判别表达式能否为数值。nIsNull (表达式),判别表达式能否为一个无效值null。nIsObject (标志符),判别标识符能否表示对象变量。10.4 VBA编程根底n程序流程控制n单分支构造n多分支构造nFor循环nDo循环nDo while循环10.4 VBA编程根底n单分支构造:IF语句n在VBA中if语句有多种书写方式,要求同窗一致用规范格式:nIf 条件 thenn条件成立执行的语句nEnd ifn假设要同时处置条件不成立语句,可以加Else分支nIf 条件 thennElsenEnd if10.4 VBA编程根底nIf语句的每个执行部分即可以是简单语句序列,也可以是其他流程控制构造,假设是if语句,就是if嵌套。nIf 条件1 thennIf 条件2 thennElsenEnd ifnElsenIf 条件3 thennElsenEnd ifnEnd if10.4 VBA编程根底nIf语句的灵敏运用:案例3个数中选择最大值n嵌套运用n平行运用n结论:尽量运用平行运用,适当运用简单嵌套,防止复杂嵌套。10.4 VBA编程根底n多分支构造:Select Case语句n运用Select Case分支构造可以防止运用if语句复杂嵌套,提高程序的可读性。n格式:nSelect Case 变量或者表达式nCase 表达式1n语句块1nCase 表达式2n语句块2nnCase elsen语句块n1nEnd Select10.4 VBA编程根底nSelect case 分支构造阐明n变量或表达式,可以是数值型或字符串型。Case 表达式与 Select Case 变量或表达式的类型必需一样。nCase表达式可以是以下几种格式:n单一数值或一行并列数值用,隔开n用关键字to分割开的两个数值或表达式之间的范围。n用is关系运算符表达式n可以是上面3个的复合运用10.4 VBA编程根底nFor循环,普通用于固定循环次数的循环场所n格式:nFor 循环变量=初值 to 终值 step 步长n语句块nexit fornNext n默许下Step1,假设希望是其他内容,就修正这个步长n其他方面类似C+,exit for 是中途终了循环。10.4 VBA编程根底nDoloop循环n格式:nDon语句块nExit donloopn特点是至少运转一次的循环,默许下是无限循环,需求运用exit do 终了循环。n可以添加While或者until组成有条件循环。两者差别是while条件是开场条件,until 条件是终了条件。10.4 VBA编程根底n有条件do循环nDo n语句块nexit donLoop while 条件表达式until 条件表达式n这种循环也是至少执行一次的循环,不断到条件不成立或者中途exit do 退出为止。10.4 VBA编程根底nWhile或until条件也可以前置,实现先判别在循环。nDo while 条件表达式until 条件表达式n语句块nexit donLoopn通常运用do循环都是运用这种类型循环。10.4 VBA编程根底nUntil运用nsum = 0ni = 1nDo Until i 100nsum = sum + ini = i + 1nLoopnWhile运用nsum = 0ni = 1nDo Until i = 100nsum = sum + ini = i + 1nLoop10.5 过程调用与参数传送n函数调用n与调用规范函数格式一样:函数名实参表n过程调用nCall 过程名实参表n或者: 过程名 实参表,这里值得留意的是假设用:过程名(实参表),那么会出错,除非用:a=过程名(实参表),也就是说写成函数方式就需求有变量接受结果。n通常设计中普通将有前往结果的程序块定义为函数,没有前往要求的程序块定义为过程。10.5 过程调用与参数传送n函数的局限以及弥补方案n函数虽然能前往结果,但是只能前往一个值,假好像时要前往多个结果情况:n经过自定义构造类型来处理,利用构造可以包容多个数据的特点。n列用参数表,经过实参表前往结果n在前往结果不止一个,但不是很复杂情况下,通常采用实参表来处理,假设前往非常复杂那么还是需求定义构造来处理,以提高程序的可读性。10.5 过程调用与参数传送n函数或过程假设需求经过参数来前往值,那么参数的形参类型要做改动。n实参向形参传值有2种方式:ByVal和ByRef。nByVal是值传送方式,这种方式下,形参只是复制实参的内容,形参发生任何变化和实参无关。nByRef是地址传送方式默许,这种情况下,形参和实参是一个对象,改动了形参就直接改动了实参。要希望实参前往结果,就必需将形参定义为ByRef方式。n运用ByRef方式,实参必需是明确定义了的变量,不能是Variant类型的,也不能是常量。10.5 过程调用与参数传送n演示案例:交换值类似C+)n遇见新问题:nDim x,y as integer 作为参数传送,出错n改成:dim x as integern dim y as integer,一切OK10.6 变量的作用范围n部分变量n用dim 或者Static修饰定义,出如今子过程中,只能被定义它的子过程访问。n模块变量n用dim或者private修饰定义,出如今窗体模块或者通用模块中,只能被本模块的各个过程访问。n全局变量n用Public定义的,能被任何位置程序访问。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号