Access基础教程--第八章 使用VBA编程

本章深入探讨Access中的VBA编程,包括VBA的基础知识、数据类型转换、程序调试与运行。详细介绍了各种VBA数据类型,如Boolean、Byte、Integer、Long、Currency、Date、Double、String等的特性和用法。此外,还讲解了数据类型间的转换,以及如何在VBA中创建和设计程序,包括常量定义、循环结构和事件处理。最后,探讨了VBA如何与数据库进行交互,如打开数据库、更新记录和添加新记录的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
本章内容
 
◆ VBA编程基础
◆ 创建和设计VBA程序
◆ VBA程序调试与运行
 
 
一、 VBA 编程基础知识
 
    在执行简单的操作时,宏可以完成,如窗体的打开与关闭、工具栏的显示和隐藏等。对于稍复杂一些的任务,则可用Visual Basic for Application进行编程完成。
 
1 .VBA的数据类型
 
下面对VBA中的数据类型、数据类型之间的转换、数据类型的对比进行介绍。
 
⑴ 数据类型
 
下表列出VBA中的基本数据类型。
 
类型名            声明符 字节  
————————————————
Byte(单字节型)           1   
Integer(整型)     %      2  
Long(长整型)      &      4  
Single(单精度型)  !      4
Double(双精度型)  #      8
Currency(货币型)  @      8
String(字符型)    $     n*1
Boolean(布尔型)          2
Date(日期型)             8
Variant(变体型)          x
Object(对象型)           4
————————————————
其中,字节、整型、长整型、单精度、双精度、货币等数据类型都属于数值数据类型,可以进行各种数学运算。字符型数据类型用来声明字符串。布尔型数据类型用来表示一个逻辑值,为真时显示True,为假时显示Flase。日期型数据类型用来表示日期,日期常量必须用#括起来,如#2001/3/26#。变体型数据类型可以存放系统定义的任何数据类型,如数值、字符串、布尔及日期等,其数据类型由最近放入的值决定。
 
用户可以使用Type语句定义任何数据类型。用户自定义数据类型可以包括数据类型数组,或当前定义的用户自定义类型的一种或多种元素。
语法:
[ Private | Public ] Type 类型名
    元素名 As 数据类型
  [ 元素名 As 数据类型 ]
    ……
End Type
 
例如:定义班级中学生的基本情况数据类型如下:
 
Public Type Students
  Name As String(8)
Age  As Integer
End Type
 
声明变量:
 
Dim Student As Students
 
引用数据:
 
Student.Name=”张三”
Student.Age=15
 
下面是详细参考内容
 
◆ Boolean 数据类型
Boolean 变量存储为 16 位(2 个字节)的数值形式,但只能是 True 或是 False。Boolean 变量的值显示为 True 或 False(在使用 Print 的时候),或者 #TRUE# 或 #FALSE#(在使用 Write # 的时候)。使用关键字 True 与 False 可将 Boolean 变量赋值为这两个状态中的一个。
当转换其他的数值类型为 Boolean 值时,0 会转成 False,而其他的值则变成 True。当转换 Boolean 值为其他的数据类型时,False 成为 0,而 True 成为 -1。
 
◆ Byte 数据类型
Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。
Byte 数据类型在存储二进制数据时很有用。
 
◆ Currency 数据类型
Currency 变量存储为 64 位(8 个字节)整型的数值形式,然后除以 10,000 给出一个定点数,其小数点左边有 15 位数字,右边有 4 位数字。这种表示法的范围可以从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的类型声明字符为at号 (@)。
Currency 数据类型在货币计算与定点计算中很有用,在这种场合精度特别重要。
 
◆ Date 数据类型
Date 变量存储为 IEEE 64 位(8 个字节)浮点数值形式,其可以表示的日期范围从 100 年 1 月 1 日到 9999 年 12 月 31 日,而时间可以从 0:00:00 到 23:59:59。任何可辨认的文本日期都可以赋值给 Date 变量。日期文字须以数字符号 (#) 扩起来,例如,#January 1, 1993# 或 #1 Jan 93#。
Date 变量会根据计算机中的短日期格式来显示。时间则根据计算机的时间格式(12 或 24 小时制)来显示。
当其他的数值类型要转换为 Date 型时,小数点左边的值表示日期信息,而小数点右边的值则表示时间。午夜为 0 而中午为 0.5。负整数表示 1899 年 12 月 30 日之前的日期。
 
◆ Decimal 数据类型
Decimal 变量存储为 96 位(12 个字节)带符号的整型形式,并除以一个 10 的幂数。这个变比因子决定了小数点右面的数字位数,其范围从 0 到 28。变比因子为 0(没有小数位)的情形下,最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。而在有 28 个小数位的情况下,最大值为 +/-7.9228162514264337593543950335,而最小的非零值为 +/-0.0000000000000000000000000001。
注意 此时,Decimal 数据类型只能在 Variant中使用,也就是说,不能声明一变量为 Decimal 的类型。不过可用 Cdec 函数,创建一个子类型为 Decimal 的 Variant。
 
◆ Double 数据类型
Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486231E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。
 
◆ Integer 数据类型
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符号 (%)。
也可以用 Integer 变量来表示枚举值。枚举值可包含一个有限集合,该集合包含的元素都是唯一的整数,每一个整数都在它使用时的上下文当中有其特殊意义。枚举值为在已知数量的选项中做出选择提供了一种方便的方法,例如,black = 0,white = 1 等等。较好的编程作法是使用 Const 语句将每个枚举值定义成常数。
 
◆ Long 数据类型
Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。
 
◆ Object 数据类型
Object 变量存储为 32 位(4 个字节)的地址形式,其为对象的引用。利用 Set 语句,声明为 Object 的变量可以赋值为任何对象的引用。
注意 虽然以 Object 类型声明的变量足以适应包含对各种对象的引用,但是绑定到变量引用的对象总是在晚期(运行时)绑定。要强迫在早期(编译时间)绑定的话,须将对象的引用赋值给用特定类名称声明的变量。
 
◆ Single 数据类型
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。
 
◆ String 数据类型
字符串有两种:变长与定长的字符串。
变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。
注意 Public 定长字符串不能在类模块中使用。
String 之字符码的范围是 0 到 255。字符集的前 128 个字符(0 到 127)对应于标准的 U.S. 键盘上的字符与符号。这前 128 个字符与 ASCII 字符集中所定义的相同。后 128 个字符(128 到 255)则代表特殊字符,例如国际字符,重音符号,货币符号及分数。String 的类型声明字符为美元号 ($)。
 
◆ 用户定义数据类型
可以是任何用 Type 语句定义的数据类型。用户自定义类型可包含一个或多个某种数据类型的数据元素、数组或一个先前定义的用户自定义类型。例如:
Type MyType
    MyName As String        '定义字符串变量存储一个名字。
    MyBirthDate As Date     '定义日期变量存储一个生日。
    MySex As Integer        '定义整型变量存储性别
End Type                    '(0 为女,1 为男)
 
◆ Variant 数据类型
Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。
Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 Empty、Error、Nothing 及 Null等特殊值。可以用 VarType 函数或 TypeName 函数来决定如何处理 Variant 中的数据。
数值数据可以是任何整型或实型数,负数时范围从-1.797693134862315E308 到 -4.94066E-324,正数时则从 4.94066E-324 到 1.797693134862315E308。通常,数值 Variant 数据保持为其 Variant 中原来的数据类型。例如,如果把一个 Integer赋值给 Variant,则接下来的运算会把此 Variant 当成 Integer 来处理。然而,如果算术运数针对含 Byte、Integer、Long 或 Single 之一的Variant 执行,并当结果超过原来数据类型的正常范围时,则在 Variant 中的结果会提升到较大的数据类型。如 Byte 则提升到 Integer,Integer 则提升到 Long,而 Long和Single 则提升为 Double。当 Variant 变量中有 Currency、Decimal 及 Double 值超过它们各自的范围时,会发生错误。
可以用 Variant 数据类型来替换任何数据类型,这样会更有适应性。如果 Variant 变量的内容是数字,它可以用字符串来表示数字或是用它实际的值来表示,这将由上下文来决定,例如:
Dim MyVar As Variant
MyVar = 98052
在前面的例子中,MyVar 内有一实际值为 98052 的数值。像期望的那样,算术运算子可以对 Variant 变量运算,其中包含数值或能被解释为数值的字符串数据。如果用 + 运算子来将 MyVar 与其他含有数字的 Variant 或数值类型的变量相加,结果便是一算术和。
Empty 值用来标记尚未初始化(给定初始值)的 Variant 变量。内含 Empty 的 Variant 在数值的上下文中表示 0,如果是用在字符串的上下文中则表示零长度的字符串 ("")。
不应将 Empty 与 Null 弄混。Null 是表示 Variant 变量确实含有一个无效数据。
在 Variant 中,Error 是用来指示在过程中出现错误时的特殊值。然而,不像对其他种类的错误那样,程序并不产生普通的应用程序级的错误处理。这可以让程序员,或应用程序本身,根据此错误值采取另外的行动。可以用 CVErr 函数将实数转换为错误值来产生 Error 值。
 
⑵ 数据类型之间的转换
 
在进行VBA编程过程中,用户可以将一种数据类型的数据转换成另一种特定类型的数据。如:
A=Cstr(2000),则将数值转换为字符型数据。下面列出这些转换函数:
 
函数名     目标类型
——————————
Cbyte       Byte
Cint        Integer
Clng        Long
Csng        Single
Cdbl        Double
Ccur        Currency
Cdate       Date
Cvar        Varriant
——————————
 
⑶ 数据类型的对比
 
在Access中,有4种不同的编辑环境需要用户指定数据类型——表设计视图、查询参数、VBA代码、SQL查询视图。下表列出数据类型与VBA数据类型对比。
 
字段数据类型                    VBA数据类型
——————————————————————
Yes/No                              Boolean
Number(Byte)                        Byte
AutoNumber(Long Integer)            Long
Currency                            Currency
Date/Time                           Date
Number(Double)                      Double
OLE Object                          String
AutoNumber/GVI(同步复制ID)        不支持 
Memro                               string
Number(Single)                      Single
Number(Integer)                     Integer
Text                                String
Hyper Link                          String
不支持                              Variant
——————————————————————
 
2 .常量
 
定义常量来代替那些固定不变量的数字或字符串,可以提高代码的可读性和可维护性。VBA中有一部分常量是系统预先定义的,可以直接使用。用户也可以使用自己定义的常量,但在使用之前必须声明,以便分配内存空间。语法如下:
[Public/Private] Const 常量名 [As 数据类型] = 表达式
例如:
Const Pi=3.14159265358979323
Public Const A1 As Integer=6
Const BornDay=#03/23/80#
Private Const A2=”Abcdef258”
 
常量有3个范围级别:过程级别(在过程中声明的)、私有模块级别(Private)、公共模块级别(Public)。
Access支持3种类型的常量:
 
◆ 符号常量:需要声明的常数都是符号常量。
◆ 固有常量:是Access或引用对象库的一部分。
◆ 系统定义常量:True、False、Null。
 
其中,符号常量可以按上述方法声明;系统定义常量只有上述三个。而固有常量则比较复杂一些,它是系统自动定义的,它由应用程序列与控件提供。它采用两种方法来限定常数:通过前缀(如VBA对象库的常数都以Vb开头,如Vb Tile Horizontal)或通过库应用([Libyan]|[mdul name] Constant)。
用户可以使用对象浏览器来查看所有对象库中的固有常量列表。具体操作如下:
◆ 单击数据库窗口【对象】栏下的【模块】按钮,再单击工具栏中的【代码】按钮,进入模块代码窗口。
◆ 单击代码窗口工具栏中的【对象浏览器】窗口。
◆ 要查看可以使用的常量,在【对象浏览器】窗口中的【工程/库】下拉列表框中选择【所有库】选项。此时,在窗口的【类】列表框中将显示所有引用对象库中的类。
◆ 在【搜索文字】下拉列表框中输入“Constant”,然后单击【对象浏览器】工具栏上的【搜索】按钮,则会在【搜索结果】列表框中显示所有固有常量类型。所有的这些固有常量都可以在宏或VBA中使用,用户可以在任何时候,在任何允许使用符号常量或用户自定义常量的地方使用固有常量。
 
Access中主要有以下几种类型的固有常量:操作常量、DAO常量、事件过程常量、关键字常量、Run Command 方法常量、安全常量、VBA常量和Var Type函数常量。
 
下面是VBA定义的一些常数,使程序设计变得更为简单。下列常数可在程序代码中的任何地方代替实际值:
◆ Calendar 常数
常数    值 描述
vbCalGreg   0   指出使用的是阳历。
vbCalHijri  1   指出使用的是伊斯兰历法。
 
◆ CallType 常数
常数 值 描述 
vbMethod 1 指出已经调用了一个方法。 
vbGet 2 指出一个Property Get 过程。
vbLet 4 指出一个 Property Let 过程。 
vbSet 8 指出一个 Property Set 过程。
 
◆ Color 常数
常数 值描述
vbBlack 0x0 黑色
vbRed 0xFF 红色
vbGreen 0xFF00 绿色
vbYellow 0xFFFF 黄色
vbBlue 0xFF0000 蓝色
vbMagenta 0xFF00FF 紫红色
vbCyan 0xFFFF00 青色
vbWhite 0xFFFFFF 白色
 
◆ Compiler 常数
Visual Basic for Applications 定义了一些不能与 #If...Then...#Else 指令一起使用的常数。这些常数除了其范围是全局的;也就是说,除了可在工程中到处应用,在功能上与 #If...Then...#Else 指令定义的常数相同。
在 16 位开发平台上,编译常数定义如下:
 
常数 值描述
Win16 True 指出开发环境是
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值