模块与VBA编程基础_第1页
模块与VBA编程基础_第2页
模块与VBA编程基础_第3页
模块与VBA编程基础_第4页
模块与VBA编程基础_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、第8章 模块与vba编程基础在access系统屮,借助前血章节介绍的宏对象可以完成事件的响应处理,例如打开和关闭窗体、报表 等。但宏的使用也冇一定的局限性。一是宏只能处理一些简单的操作,对于复杂条件和循环等结构则无能 为力,二是宏对数据库对彖的处理,例如,表对彖或查询对彖的处理能力很弱。“模块”是将vba声明和过程作为一个单元进行保存的集合体。通过模块的组织和vba代码设计, 可以大大提高access数据库应用的处理处理能力,解决复杂问题。本章主要介绍access数据库的模块类型及创建、vba程序设计的基础。8模块的基本概念模块是access系统中的一个重要对彖,它以vba (visual b

2、asic for aapplication)以函数过程 (function)或了过程(sub)为单元的集合方式存储。access屮,模块分为类模块和标准模块两种类型。&1类模块窗体模块和报表模块都属于类模块,它们从属于各白的窗体或报表。在窗体或报表的设计视图环境下 可以用两种方法进入相应的模块代码设计区域;一是鼠标点击工具栏“代码”按钮进入;二是为窗体或报 表创建事件过程时,系统会口动进入相应代码设计区域。窗体模块和报表模块通常都含有事件过程,而过程的运行用于响应窗体或报表上的事件。使用事件过 程可以控制窗体或报表的行为以及它们对用户操作的响应。窗体模块和报表模块中的过程可以调用标准模

3、块中已经定义好的过程。窗体模块和报表迷狂具冇局限性,其作川范围局限在所属窗体或报表内部,而生命周期则是伴随着窗 体或报表的打开而开始、关闭而结束。8.1.2标准模块标准模块一般用于存放供其他access数据库对象使用的公共过程。在系统中可以通过创建新的模块对 象而进入其代码设计环境。标准模块通常安排一些公共变量或过程供类模块里的过程调川。在各个标准模块内部也口j以定义私冇 变量和私有过程仅供本模块内部使用。标准模块中的公共变址和公共过程具有全局特性,其作用范围在整个应用程序里,生命周期是伴随着 应用程序的运行而开始、关闭而结束。8.1.3将宏转换为模块在access系统中,根据碍要nj以将设计

4、好的宏对彖转换为模块代码形式。8.2在access中创建模块8.2创建模块过程是模块的单元组成,由vba代码编写而成。过程分两种类型:sub子过程和function函数过程。一、在模块中加入过程模块是装着vba代码的容器。在窗体或报表的设计视图里,单击工具栏“代码”按钮或者创建窗体 或报表的事件过程町以进人类模块的设计和编辑窗口;单击数据库窗体中的“模块”对彖标签,然后单击 “新建”按钮即可进人标准模块的设计和编辑窗口。一个模块包含-个声明区域,且可以包含一个或多个子过程(以sub开头)或函数过程(以function 开头)。模块的声明区域是用来声明模块使用的变量等项目。l.sub过程乂称为子

5、过程。执行一系列操作,无返回值。定义格式如下:sub过程名程序代码end sub可以引用过程名來调用该子过程。此外,vba提供了一个关键字call,可显示调用的一个子过程。在 过程名前加上call是一个很好的程序设计习惯。2. function 过程乂称为函数过程。执行一系列操作,有返回值。定义格式如下:function h程名as (返回值)类型程序代码end function函数过程不能使丿ij call來调用执行,需要直接引川函数过程名,并由接在函数过程名后的括号所辨别。二、在模块中执行宏在模块的过程定义中,使用docmd 象的runmacro方法,可以执行设计好的宏。其调用格式为:do

6、cmd.runmacro macronameyrepeatcount ,repeatexpression其屮,macroname表示当前数据库屮宏的侑效名称;repeatcount可选项,用于计算宏运行次数的整 数值;repeatexpression可选项,数值表达式,在每一"次运彳亍宏时进彳亍计算,结果为false时,停止运行宏。 8.3 vba程序设计基础vba是徽软office套件的内直编程语言,其语法与visual basic编程语言互相兼容。在access程序设 计屮,当某些操作不能用其他access对象实现,或者实现起来很困难时,就可以利用vba语言编写代码, 完成这些复

7、杂任务。下而介绍vba编程语言的一些概念和方法。8.3.1而向对象程序设计的基本概念access内部提供了功能强大的向导机制,能处理慕木的数据库操作。在此基础上再编写适当的程序代 码,可以极人地改善程序功能。access内嵌的vba,功能强大,采用目前主流的而向对豫机制和可视化编程环境。1.对象和集合access采用面向对象程序开发环境,其数据库窗口可以方便地访问和处理表、杏询、窗体、表、页、 宏和模块对彖。vba中可以使用这些对彖以及范围更广泛的一些可编程对彖,例如“记录集”等。一个对象就是一个实体,如一辆口行车或一个人等。每种对彖都具有一些属性以相互区分,如口行车 的尺寸、颜色等。即属性可

8、以定义对象的一个实例。例如一辆28#的自行车和一辆26#自行车就分别定义 了占行车对象的两个不同的实例。对象的属性按其类别会有所不同,而且同一对象的不同实例属性构成也可能有羌异。比如白行车对象 的属性与人这个対象的属性显然不同、同属自行事対象的普通自行车和专业自行车的属性构成也不尽和 同。对象除了属性以外还有方法。对象的方法就是对象的可以执行的行为,自行车行走、人说话等。一般 情况下,对象都具有多个方法。access应用程序由表、查询、窗体、报表、页、宏和模块对象列表构成,形成不同的类。access数据 库窗体左侧显示的就是数据库的对彖类,单击其中的任一对彖类,就可以打开相应对彖窗口。而其中

9、有些对彖内部,例如窗体、报表等,述对以包含其他对彖-access中,控件外观和行为可以设置定义。集合表示的是某类对象所包含的实例构成。2.属性和方法属性和方法描述了对象的性质和行为。其引用方式为:对象属性或对象.行为。access中“对象”可以是单一对象,也可以是对彖的集合。例如,labell.caption属性表示“标签”控 件对象的标题屈性,reports.item (0)表示报表集合屮的第一个报表对象。数据库对象的屈性均町以在各 自的“设计”视图中,通过“属性窗体”进行浏览和设置。access应用程序的各个对象都冇一些方法可供调用。了解并学握这些方法的使用可以极大地增强程序 劝能,从而写

10、出优秀的access程序来。access中除数据库的7个対象外,还提供一个重要的对象:docmd対象。它的主要功能是通过调用 包含在内部的方法实现vba编程中对access的操作。例如,利用dacmd对彖的open report方法可打开报表"教师信息”,语句格式为:docmd.openreport "教师信息"docmd对象的方法大都需要参数。有些是必给的。有些是可选的,被忽略的参数取缺省值。例如, 上述openreport方法有4个参数.见卜面调用格式:docmd. openreport reportnamef, view, filtername, where

11、condition 其中只有reportname (报表名称)参数是必需的。docmd对彖还有许多方法,可以通过帮助文件查询使用。3.事件和事件过程事件是access窗休或报表及其上的控件等对象可以“辨识”的动作,如单击鼠标、窗体或报表打开等。 在access数据库系统里,可以通过两种方式来处理窗体、报表或控件的事件响应。一是使用宏对象来设置 事件属性,対此前面已有叙述;二是为某个事件编写vba代码过程,完成指定动作,这样的代码过程称 为事件过程或事件响应代码。8.3.2 visual basic 编辑环境一、visual basic 编辑器visual basic编辑器(vbe, visua

12、l basic editor)是编辑vba代码时使用的界面。vbe编辑器提供了 完整的开发和调试工具。图8.1所示的是access数据库的vba窗体。窗体主要由标准工具栏、工程窗口、 属性窗口和代码窗口等组成。 j! i.inqi nmorj飾<v x*<:>vao)obep标准工具栏工程由口; pttt 山圖j对戲姐合桓代码编辑区禺件组合柩代码宙口(i i宜即宙口昂8.】vbe宙口1 .标准工具栏图8.2 vbe标准工翼栏vba窗口中的工具栏如图8.2所示。t具栏中主要按钮的功能见表8.1所示。衷8标准工具栏按钮功佩俛明名称劝值a切换acc«s数据庠田口抽人模块用

13、干块jl运行子锲块/用户宙体迄行枳块程序中断运行中断正在运行的程序ai块止运行/飛祈设證结jr正在运行的程斥负新进入模块设计状态设计模式打开或关闭设计模式工程顶目宦理期打开工程项目u理掘側口側性由体打开国性由体打开对象浏览器由口,15 1 > 列 1行列代码曲口中光标所在的ft号和列号2. 工程窗口 (project)t程窗i i又称t程资源管理器。在其中的列表框中列出了应用程序的所有模块。单击“查看代码”按 钮町以打开相应代码窗口,单击“查看对彖”按钮可以打开相应对彖窗口,单击“切换文件夹”按钮口j以 隐藏或显示对彖分类文件夹。双击工程窗口上的一个模块或类,就会显示出相应代码的窗口。3

14、. 代码窗口 (code)代码窗口是由对象组合框、事件组合框和代码编辑区3部分构成。在代码窗口屮可以输入和编辑vba代码。实际操作时,可以打开多个代码窗口查看各个模块的代码, 口代码窗口z间对以进行复制和粘贴。4. 属性窗口(propertis)属性窗口列出了所选对象的各个属性,分“按字母序”和“按分类序”两种查看形式。可以直接在属 性窗口中编辑对象的属性,这种方法称对象属性的一种“静态”设置法;此外,还可以在代码窗1丨内使用 vba代码编辑对彖的属性,这属于对彖属性的“动态”设置方法。注意,为了在属性窗口中列iii access类对彖,应首先打开这些类对彖的“设计”视图。5. 立即窗口 (i

15、mmediate)立即窗口是用來进行快速的表达式计算、简单方法的操作及进行程序测试的工作窗口。在代码窗口编 写代码时,要在立即窗口打印变最或表达式的值,可使用debug.print语句。二、进入vbe编程环境在本章8.1节介绍了关于模块的概念,vbe的工程逾管理器将模块分为“对彖”、“标進”和“类”3种 类型模块,全部的vba代码全都包含在这3种类型模块中。对象模块包含了对窗体和报表发牛:的事件响 应编写的代码;标准模块包含独立于指定对象的代码;类模块用于定义自定义对象的代码,在这里类模块 暂不做讨论。进人vbe编辑环境有多种方式:对于对象模块,在数据库对彖窗体中,直接定位到窗体或报表上, 然

16、后单击菜单“视图吓的“代码”命令进人 或先定位到窗体或报表设计视图窗口上,通过指定对象事件处 理过程进人,其方法有两种:(1) 右键单击控件对彖,单击快捷菜单上的“小件生成器”命令,打开如图&3所示的对话框,选择其 中的“代码生成器”,单击“确定”按钮即可进人。(2)单击属性窗口的“事件“选项卡,选中某个事件直接单击属性栏右旁的按钮,也可以打开如图8.3所示“选择生成器”对话框,选择其中的“代码生成器”,单击“确定”按钮即可进入。主耳 1test! 9图8. 3 “选择生成器"对话框对于标准模块,有3种进入方法:(1)对于已存在的标准模块,只需从数据库窗体对彖列表上选择“模块

17、”选项打开模块窗口,双击耍査 看的模块对彖即可进人。(2)要创建新的标准模块,需从数据库窗体对象列表上选择“模块”选项打开模块窗口,单击工具栏上 “新建”按钮即可进人。(3)在数据库对象窗体屮,选择“工具”菜单里“宏”了菜单的“visual basic编辑器”选项即可进人。使 用alt+fl 1组合键,可以方便地在数据库窗口和vbe之间进行切换。三、vbe环境中编写vba代码vba代码是由语句组成的,一条语句就是一行代码,例如:intcount=3,将 3 赋值给变量 intcountdebug. print intcount,在立即窗口打卬变量intcount的值3在vba模块中不能存储单独

18、的语仙 必须将语句组织起来形成过程,即vba程序是块结构,它的主 体是事件过程或自定义过程。在vee的代码窗口,将上而的两条语句写入一个口定义的子过程procel:sub proccl ()dim intcount as integerintcount=3debug.print intcountend sub将光标定位在子过程procel的代码中,按f5键运行子过程代码,在立即窗口会看到程序运行结果:3。对事件过程的代码编写,只要双击工程窗11任何类或对象都可以在代码窗口中打开相应代码并进行 编辑处理。操作时,在代码窗口的左边组合框选定一个对象后,右边过程组合框中会列出该対象所有事件 过程,再

19、从该对彖事件过程列表选项中选择某个事件名称,系统会自动生成相应的事件过程模板,川户添 加代码即可,如图8.4所示。通用声明段过程块过程块09 8.4自动显示提示仃q代码编辑区上部的通用声明段,主要书写模块级以上的变量声明、对选项的设置等,控制结构等语句要写 在过程块结构中,过程块的先后次序与程序执行的先后次序无关。在代码窗口内输人代码时,系统会自动显示关键字列表、关键字属性列表及过程参数列表等対象方法提 示信息,方便初学用户的使用。例&1新建窗体并在其上放置一个命令按钮,然后创建该命令按钮的“单击"事件响应过程。操作步骤如下:(1)进人access的窗体“设计”视图,在新建窗

20、体上添加一个命令按钮并命名为“emdtest”,如图8.5所(2)选择“test”命令按钮,单击右键打开属性窗体,单击“事件”卡片并设置“单击”属性为“(事件过 程)”选项以便运行代码,如图8.6所示。09 8.5新建由体港面设愿-单击舉件屈性(3)单击属性栏右边的按钮,即进入新建窗体的类模块代码编辑区,如图8.7所示。在打开的代 码编辑区里,可以看见系统已经为该命令按钮的“单击”事件口动创建了事件过程的模板。此时,只需在模板中添加vba程序代码,这个事件过程即作为命令按钮的“单击”事件响应代码。这 里,仅给出了一条语句:msgbox ”测试完毕! ” , vbinformation, ” t

21、itle ”如图8.8所示。x敎学管理11 - 5".口同网|n<itest £j |oliekfprivate sub ct><!test_clickoa1bnd丫自动建立的事、sjjj 丄件过桎棋板的87珥件过程代码细糾区乂枚学它玫ii -代刃) 匡叵図3private sub cadtest click0bscbom*. vblnformation.气bad sub|cadlest在扇件过程按板中忝加需耍的代码4)按alt + fl 1组合键回到窗体“设计”视图,运行窗体,单击“test”命令按钮即激活命令按钮“单击"事件, 系统会调用设计

22、好的事件过程來响应“单击”事件的发牛,弹出“测试完毕消息框。响应代码运行效果如 图8.9所示。图8.9那件代硏运行结果需要说明的是,上述事件过程的创建方法适合于所有access窗体、报表和控件的事件代码处理。其间, access会自动为每一个事件声明事件过程模板,并使用private关键字指明该事件过程只能被同一模块中 的其他过程所访问。四、程序语句书写原则1 语句书写规定通常将一个语句写在一行。语句较长,一行写不下时,可以用续写符(_)将语句连续写在下一行。 可以使用冒号(:)将几个语句分隔写在一行中。当输入一行语句并按卜回车键后,如果该行代码以红色文本显示(有时伴有错谋信息出现),则表明

23、该行语句存在错误应更正。2. 注释语句一个好的程序一般都有注禅语句。这对程序的维护有很大的好处。在vba程序中,注释可以通过以下两种方式实现:使用rem语旬,格式为:rem注释语句用单引号一,格式为:注释语句例&2定义变量并赋值。rem定义两个变量dim strl str2strl =ubeijingm: rem注释在语句z后耍用冒号隔开str2shanghai这也是一条注释。这时,无需使用冒号。注释可以添加到程序模块的任何位宜,并且默认以绿色文本显示。还可以利用“编辑”工具栏小的“设置 注釋块”按钮和“解除注弩块“按钮”,对人块代码进行注释或解除注释。3採用缩写格式li;写程序采取止

24、确的锁鞋进行格式以显示出流程中的结构。也町以利川“编辑”菜单下的“缩进”或“凸出"命令进 行设置。4.f1帮助信息町以将键盘光标停超在某个语句命令上按下f1键,系统会立刻提供相关的帮助信息。8.3.3数据类型和数据库对象access数据库系统创建表对象时所涉及的字段数据类型(除了 ole对象和备注数据类型外),在vba 屮都存数据类型相对应。一、标准数据类型传统的basic语言使用类型说明标点符号来定义数据类型,vba则除此之外,还可以使用类型说明 字符來定义数据类型,参见表8.2所示的vba类型标识、符号、字段类型及取值范围。在使用vb代码中 的字节、整数、长整数、自动编号、单粉度

25、和双梢度数等的常虽和变城与access的其他对象进行数据交换 时.必须符合数据表、查询、窗体和报表中相应的字段属性。vbak据类型列殁效据类显类型标识符号字毁类讯収血范圈整飲integer%字节/»»/!&/否-32768 * 32767long&长皱®(/自动给号2147433648 -2147483647单梢度数singe1单辅度散.负# -3.402823e3« - - l40i298e-45 正效 1.40i298e 45 -3.402823e38double双 filselk负数-1.79769313486232 e3o8- -

26、4.94065645841247e-324 正数 4.94065645841247e 324 - 1.79763is4s6232e308货币currency货币 922337203685477.5808 - 922337203685477.5807 字符申strings文本0字符-65500字符布尔5!booleantrue 或 false日期割dale日期/时间100年1月1日-9999年12月31日变体类取variant无任何january1/10000( b 期) 效字和双»度同文本和字符申同1. 布尔型数据(boolean)布尔型数据只有两个值:true和false。布尔型数

27、据转换为其他类型数据时,true转换为false转换为0;其他类型数据转换为布尔型数据时,0转换为false, -k他值转换为ture。2. 日期型数据(date)任何町以识别的文本日期数据都对以赋给日前变量。“时间/日期”类型数据必须前后用“#”号封住,例如#2003/11/12#o3. 变体类型数据(variant)变体类型是一种特殊的数据类型,除了定氏字符串类型及用户自定义类型外,可以包含英他任何类型 的数据。变体类型还口j以包含其他emptyerror、nothing和null特殊值。使川时,町以jij vartype与 typename两个函数来检查variani中的数据。vba屮规

28、定,如果没有显式声明或使川符号來定义变量的数据类型,则默认为变休类型。variant数据类型十分灵活,但使用这种数据类型最人的缺点在于缺乏可读性,即无法通过查看代码來 明确其数据类型。二、用户定义的数据类型应用过程中可以建立包含一个或多vba标准数据类型的数据类型,这就是用户定义数据 类型。它不仅包含vba的标准数据类型,还可以包含前面已经说明的其他用户定义数据类型。用户定义数据类型可以在type.end type关键字间定义,定义格式如卜:type数据类型名域名as数据类型域名as数据类型end type例8. 3定义一个学生信息数据类型。type newstudcnttxtno as st

29、ring * 7txtname as stringtxtsex as stringltxtage as intcger学号,7位定长字符串姓名,变长字符吊性别,1位定长字符中年龄,整型end type上述例子定义t由txtno (学号)、txtname (姓名)、txtsex (性别)和txtage (年龄) 4个分量组成的名为newstudent的类型。当需要建立一个变量来保存包含不同数据类型字段的数据表的一条或多条记录时,用户 定义数据类型就特别有用。一般用户定义数据类型使用时,首先要在模块区域中定义用户数据类型,然后显示以dim, public或static关键字来定义此用户类型变量。用

30、户定义类型变量的取值可以指明变量名及分量名,两者之间用句号分隔,例如,定义 一个学生信息类型变量newstud井操作分址的例了如下:dim ncwstud as newstudcntnewstud. txtsno = “980306”newstud. txtnamc = “冯伟"newstud. txtsex ="女”newstud. txtagc = 20可以用关键字with简化程序屮重复的部分。例如,为上面newstud变量赋值可以用:with newstud.txtsno = “980306”.txtname ="冯伟".txtsex 二"

31、;女” txtage = 20end age8.3.4变疑与常量变量是指程序运行吋值会发生变化的数据。变量名的命名,同字段命名一样,变量命名不能包含有空 格或除了下划线字符(_)外的任何其他的标点符号,其长度不得超过255个字符。此外,变量命名不能使用vba的关键字。vba屮的变量命名通常采用人写与小写字母相结合的方式, 以使其更具可读性。需要指出的是,在vba里变量命名人小写不“敏感”,即“newvar”和“newvar”代 表的是同一个变:s。常量是在程序中可以直接引用的实际值,其值在程序运行中不变。不同的数据类型,常量的表现形式 也不同,在vba中有3种常量:直接常量、符号常量和系统常量

32、。一、变量的声明变量声明就是定义变量名称及类型,使系统为变量分配存储空间。vba声明变虽:有两种方法。1. 显式声明变量先定义后使用是较好的程序设计习惯,如c、c+和java语言等,都要求在使用变量前先定义该 变量。定义变量最常用的方法是使用dim-as<vartype>结构,其中,as后指明数据类型,或在变量名称 后附加类型说明字符來指明变量的数据类型。这种方式是显式定义变量。例如:dim new var_l as integer' newva 为整型变量dim new var_2% , sun!' newvar_2为整型变量,sun为单精度型变量dim newv

33、ar_2% , sun !相当于 dim new var_2 as integer, sum as single。2. 隐含声明没冇氏接定义而通过一个值指定给变最名,或dim定义屮省略了 asvva门we>短语的变最,或当在变 量名称后没有附加类型说明字符來指明隐含变量的数据类空时,默认为variant数据类型。如:dim m, n,' m、n 为变体 variant 变址newvar = 528' newvar 为 variant 类型变见,值是 528二、强制声明在默认愉况下,v8a允许在代码中使用术声明的变址.如果在模块设计窗口的顶部“通用芦明”区域 中,加人语句:

34、option explicit强制要求所有变置必须定义才能使用。这种方法只能为当前模块设置了自动变置声明功能,如果想为所有新模块都启用此功能。可以单击菜单命令“工具”下“选项”对话框中,选中“要求 变量声明”选项即可。三、变量的作用域在vba编程中,变量定义的位置和方式不同,则它存在的时间和起作用的范围也冇所不同,这就是 变量的作用域与生命周期。visual basic中变量的作用域有3个层次。1. 局部范围(local)变量定义在模块的过程内部,过程代码执行吋才可见。在子过程或函数过程中定义的或直接使用的变 量作用范围都是局部的。在子过程或西数内部使用dim、static-as关键字说明的变

35、量就是局部范围的。2. 模块范围(module)变量定义在模块的所有过程之外的起始位置,运行时在模块所包含的所有子过程和函数过程中可见。 在模块的通用说明区,用dim、static> private-as关键字定义的变量作用域都是模块范围。3. 全局范围(public)变宜定义在标准模块的所有过程z外的起始位置,运行时在所有类模块和标准模块的所有子过程与函 数过程中都可见。在标准模块的变量定于区域,用publicas关键字说明的变量就加于全局的范围。变量还有一个特征,称为持续时间或生命周期。变量的持续时间是从变量定义语句所在了过程笫一次 运行,到程序代码执行完毕并将控制权交回调用它的过程

36、为止的世界。每次子过程或函数过程被调用时, 以dim-as语句说明的局部变量,会被设定为默认值,数值数据类型为0,字符申变量则为空字符申(” ”)。 这些局部变量,有着与子过程或函数过程登场的持续时间。要在过程的运行时保留局部变最的值,可以用static关键词代替dim定义静态变量。静态(static)变 置的持续时间是整个模块执行的时间,但它的冇效作用范围是由其定义为止决定的。四、数据库对象变量access建立的数据库对象及其属性,均可被看成是vba程序代码屮的变最及其指定的值来加以引用。 例如,access中窗体与报表对象的引用格式为:forms!窗体名称!控件名称.属性名称或report

37、s!报表名称!控件名称.属性名称关键词forms或reports分别表示窗体或报衣对象集合。感叹号“ ! ”分隔开对象名称和控件名称。“属 性名称”部分缺省,则为控件基本属性。如果对象名称中含有空格或标点符号,就要用方括号把名称括起來。下面举例说明含有学生编号信息的文木框操作:forms!学生管理!编号二“980306”forms!学生管理!编号=“980306”'对彖名称含空格时用此外,还可以使用set关键字來建立控件对象的变量。当需要多次引用对象时,这样处理是很方便。 例如,要多次操作引用窗体“学生管理”上控件“姓名”中的值时,可以使用以下处理方式:dim txtnameas co

38、ntrol'定义控件类型变量set txtname = forms!学生管理!姓名指定引用窗体控件对象txtname = “冯伟”'操作对彖变量借助将变虽定义为对象类型并使用set语句将对象指派到变置的方法,可以将任何数据库对象指定为 变量的名称。当指定给对象一个变量名时,不是创建而是引用内存的对象。关于vha中的数据库对象操作,在后面的章节中还有介绍。五、数组数组是在冇规则的结构中包含一种数据类型的一组数据,也称作数组元索变置。数组变虽由变量名和 数组下标构成,通常用dim语句来定义数组,定义格式为:dim数组名(下标下限下标上限)缺省情况下,下标下限为0,数组元素从“数组名

39、(0) ”至“数组名(下标上限)”;如果使用to选项, 则可以安排非0下限。例如:dimnewarrary (10) as integer '定义了 ii个整型数构成的数组,数组元索为newarray (0)至 newarray (10)dim naw array (1 to 10) as lotcgcr淀义了 10个整型数构成的数据,数组元素为newarray (1)至 newarray (10)vba也支持多维数组。可以在数组下标中加入多个数值,并以逗号分开,由此來建立多维数组,最做 可以定义60维。卜面定义了一个三维数组newarray:dim newarray (5, 5, 5

40、) as integer '冇 6 * 6 * 6 = 216 个元素vba还特意支持动态数组。定义和使用方法是:先用dim显示定义数组但不指名数组元素数h,然 后用redim关键字來决定数组包含的元索数,以建立动态数组。下面举例说明动态数组的创建方法:dim newarray ( ) as long,定义动态数组 redim newarray (9, 9, 9),分配数组空间人小 实际开发过程中,当预先不知道数组怎义需要多少元索时,动态数组是很冇用的。而不再需要动态 数组包含的元素时,可以使用redim将其设为()个元素,就释放该数组占用的内存。数组的作用域和住命周期的规则和关键字的

41、使用方法与传统变量的范围及持续时i、可的规则和关键字 的川法相同。可以在模块的说明区域加人global或dim语句。然后在程序中使用redim语句,以说明动态数组为 全局的和模块级的范围。如果以static取代dim来说叨数组的话,数组可在程序的运行时保昭上次运行时 的值。vba屮,在模块的声明部分使用“oplion bale 1”语句。可以将数组的默认下标下限由0改为1。六、变量标识命名法则在编写vba程序代码时,会用到大量的变量名称和不同的数据类型。对于控件对彖,可以用vba 的set关键字将每个命名的控件对象指定为一个变量名称。但随着程序代码的增多,要记住所有变量的数 据类型。就变成很闲

42、难的事情。目前,vb和vba均推荐使用hungarian符号法來作为变量命名的法则。该方法也被广泛用在c和£±± 等程序设计中。hungarian符号法使用一组代表数据类型的码。用小写字母作为变虽名的前缀。例如,代表文木框的 字首码是txt,那么,文本框变量名为tetname.表8.4列岀了最常用的变量标识符的前缀。编写程序时,使 用上述变虽标识命名法则,可使代码易于阅读与理解。»«4对金标记accent对象前蛾access对象tbl- -命令按钮- - -emd査询;qry|-标签ibl宙体frm列衷枢blrpi选顶按ffloptchk子宙体

43、/子报表mib组合挺cbo文本抵ul七、符号常量在vba编程过程中,对于一些使用频度较多的常量,可以用符号常量形式來表示。符号常量使用关 键字const来定义,格式如下:const符号常量名称二常量值例如,const pl =3.14159定义了一个符号常量pi。若是在模块的声明区中定义符号常量,则建立一个所冇模块都可使用的全局符号常量。一般是const 前血加上global或public关键词。global const pi =3.14159这一符号常量会涵盖全局或模块级的范围。符号常量定义吋不需要为常量指切数据类型,vba会口动按鈕效率最髙的方式来确定其数据类型。 符号常量一般要求大写命名

44、,以便于变量区分。八、系统常量除了用户通过声明定义符号常量外,access系统内部包含冇若干个启动时就建立了系统常量,冇true、 false、yes、no、on、off和null等。系统常量位于对象库中,单击“视图''菜单的“对象浏览器”命令,可以在“对象浏览器冲查看到access> vba等对象库中提供的常量,在编写代码时可以直接使用。例如,在“对彖浏览器"窗口中,选择“工程/库”列表的access项,再在“类”列表中选择“全局鈕'选项, access的内部常量就会列出,如图8.10所示。 *门;<1妖江 ibeewsb .acewat * i

45、««vb v s“ ik * fflb. 10对第询览髀显示内部常贤在列表“成员"中选择一个常量后,它的数值将出现在“对象浏览器”窗口的底部,如图& 10所示的“const accmdsaveas = 21”。一个好的编程习惯是尽可能地使用常量名字而不使用它们的数值。用户不能将这些 内部常屋的名字作为用户自定义常量或变量的名字。8.3.5常用标准函数在vba中,除模块创建中可以定义子过程与函数过程完成特定功能外,乂提供了近百个内置的标准 函数。可以方便地完成许多操作。标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:函数名(v参数l>v

46、,参数2>,参数3,参数4,参数5.)其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,町 以冇一个或多个,少数函数为无参函数。每个函数被调用时。都会返回一个返回值。盂要指出的是:函数 的参数和返回值都有特定的数据类型对应。常用函数请参见附录a。下而按分类介绍一些常用标准函数的 使用。一、算术函数算术函数完成数学计算功能。主要包括以下算术函数:1. 绝对值函数:abs (v表达式)返回数值表达式的绝对值。如abs (-3) =32. 向下取整函数:int (v数值表达式)返回数值表达式的向下取整数的结果,参数为负值吋返回小于等于参数值的第一负数。3.

47、取整函数:fix (v数值表达式)返回数位表达式的整数部分,参数为负值时返回大于等于参数值的第一负数。int和fix函数当参数为止值时,结果相同;当参数为负时结果可能不同。返回小于等于参数值的 第一个负数,而fix返冋人于等于参数值的第一负数。例如:int (3.25) =3, fix (3.25) =3 但 int (-3.25) =4 fix (-3.25) =-34. 四舍五入函数:round(v数值表达式,v表达式)按照指定的小数位数进入四舍五入运算的结果。v表达式是进入四舍五入运算小数点右边应保留的 位数。例如:round (3.255, 1) =3.3; round (3.255,

48、 2); round (3.754, 1) =3.28; round (3.754, 2) = 3.75; round (3.754, 0) =45. 开平方函数:sqr (v数值表达式)计算数值表达式的平方根。例如:sqr (9) =36. 产生随机数函数:rnd (v数值表达式)产生一个01之间的随机数,为单精度类型。数值表达式参数为随机数种子,决定产生随机数的方式。如果数值表达式值小于(),每次产生相同的 随机数;如果数值表达式值人于()。每次产生新的随机数;如果数值表达式值等于0,产生最近生成的随 机数,且牛成的随机数序列相同;如果省略数值表达式参数,则歌认参数位大于0。实际操作时,先

49、要使用无参数的randomize语句初始化随机数生成器。以产生不同的随机数序列。例如:int (100 * rnd)int (101 *rnd)int (100, rnd+1)int (100+200* rnd)int (100 +201*rnd)二、字符串函数'产生0, 99啲随机整数'产生0,100的随机整数'产生i,100的随机整数'产生100, 299的随机整数'产生100,300的随机整数1. 字符串检索函数:instr (start, strl, stfl , compare)检索了字符+str2在字符串se中最早出现的位置,返回一整型数。s

50、tart为可选参数,为数值式,设 置检索的起始位置。如省略,从第一个字符开始检索;如包含null值,发生错谋。compare也为可选参数, 指定字符串比较的方法。值可以为1、2和0 (缺省)。指定0 (缺省)做二进制比较,指定1做不区分大 小写的文本比较,指定2来做基于数据库中包含信息的比较。如值为null,会发生错误。如指定了 compare 参数,贝u定要有stml参数。注意,如果strl的申长度为零,或str2表示的申检索不到,贝0 instr返冋0;如果str2的串长度为零, instr返回start的值。例如:strl= “98765”str2 = “ 65 ”s = instr (

51、strl ,str2)'返回 4s = instr ( 3, lssiab”,“a”,1)'返回5。从字符s开始,检索出字符a2. 字符中长度检测函数:len (v字符中表达式或变量名)返回字符串所含字符数。注意,定长字符,其长度是定义时的长度,和字符串实际值无关。例如:dim str as string * 10dimistr= “123”i= 12lenl = len (“12345”)'返回 5len2 = len (12)'出错len3 = len (i)'返回 2lcn4 = len (“考试中心”)'返回4len4 = len (st

52、r)'返|叫 103. 字符串截収函数left(v字符串表达式,n):字符串左边起截取n个字符。right (v字符串表达式,n):字符串右边起截収n个字符。mid (v字符串表达式,n1, n2):从字符申左边第n1个字符起截取n2个字符。注意,对于left函数和righ(函数,如果n值为0,返回零长度字符串;如果大于等于字符串的字符 数,则返回整个字符串。对于mid函数,如果n1值大于字符申的字符数,返回零长度字符串;如果省略 n2,返i叫字符串屮左边起n1个字符开始的所有字符。例如:strl = "opqrst”str2= “计算机等级考试”'返回“opq”&#

53、39;返回“计算机等”'返回“st”'返回“考试”'返回“rs”'返回“计算机”'返冋“等级考试”str = left ( strl, 3)str = left ( str2, 4)str = right ( strl, 2)str = right ( str2, 2)str = mid ( strl, 4, 2)str = mid ( str2, 1, 3)str = mid (str2,4,)4. 生成空格字符函数:space (v数值表达式) 返回数值表达式的值指定的空格字符数。例如:strl = space(3)'返回3个空格字符5. 大

54、小写转换函数ucase (v字符串表达式):将字符串小小写字母转换成人写字母。lease (v字符串表达式):将字符串屮大写字母转换成小写字毋。例如:strl = ucase (“fhkryt”)'返回 “fhkryt”str2 = lease (“fhkryt”)'返回"fhkryt”6. 删除空格函数ltrim (v字符串表达式):删除字符串的开始空格。rtrim (v字符串表达式):删除字符串的尾部空格。删除宁符串的开始和尾部空格0trim (v字符串表达式):'返回 “abcde”'返回 “abcde”'返回 “abcde”例如:str

55、 = "abede”strl = ltrim (str)str2 = rtrim (str)str3 = trim (str)三、日期/时间函数fl期/时间两数的功能是处理fl期和时间。主要包描以卜函数:1. 获取系统口期和时间函数date ():返回当前系统口期。time ():返冋当前系统吋间。now ():返回当前系统h期和时间。例如:d = date ()t = time ()'返冋系统气气,如2008-08-08'返回系统时间,如9: 45: 00dt = now ()2.截取h期分量函数year (v表达式):'返回系统日期和时间,如2008-08

56、-08 9: 45: 00 返回口期表达式年份的整数。month (v表达式):返回口期表达式刀份的整数。day (表达式):返回日期表达式日期的整数。weekday (v表达式.w):返回1-7的整数,表示星期儿。weekday函数中,返回的星期值见表&5所示。袈用期尬数值描述vbsunday1星期日猷认)trbmonday2凰期一vbtuesday3显期二vbwednemlujr4赋期三vbthunsday5星期四.vbfriday6;星期五vbs lurddy7'显期六例如:d = #2008-8-8#yy= year ( d)mm = month (d),返回2008'返回8dd = day ( d)wd = weekday (d),返回8,返回6,因2008-8-8为星期五3. 截取时间分量函数hour(v表达式):返回时间表达式的小时数(0-23)。minute (v表达式):返回时间表达式的分钟数(0-58)seco

温馨提示

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

评论

0/150

提交评论