在创建新数据库时,您通常首先创建几个数据库对象(如表、窗体和报表)。最后,您还需要进行一些编程,从而自动执行某些过程并将数据库对象绑定在一起。本文帮助您熟悉 Microsoft Office Access 2007 中的编程工具并引导您找到一些可以学习更多编程知识的资源。
本文内容
? ? ? ? ? ? ?
何为编程?
我应该使用宏还是应该使用 VBA 代码? 使用“命令按钮向导”执行常见编程任务 了解宏 了解 VBA 代码 将宏转换为 VBA 代码 学习如何使用帮助系统
何为编程?
在 Office Access 2007 中,编程是使用 Access 宏或 Visual Basic for Applications (VBA) 代码向数据库中添加功能的过程。例如,假设您创建了一个窗体和一张报表,您希望向窗体中添加一个命令按钮,单击此命令按钮将会打开报表。在这种情况下,编程是这样的过程:创建宏或 VBA 过程,然后设置命令按钮的 OnClick事件属性,以便单击该命令按钮会运行宏或 VBA 过程。对于一项简单的操作,例如打开报表,您可以使用“命令按钮向导”完成所有工作,也可以关闭该向导,自己进行编程。
注释 许多 Microsoft Office 程序都使用术语“宏”来指代 VBA 代码。这可能会使 Access 用户感到迷惑,因为在
Access 中,术语“宏”指的是一个已命名的一组宏操作,您可以使用宏生成器来组合它们。Access 宏操作仅代表 VBA 中可用命令的一个子集。宏生成器提供的界面比 Visual Basic 编辑器的界面更加结构化,从而使您能够向控件和对象添加编程而无须学习 VBA 代码。您应该记住,在 Access 帮助文章中 Access 宏被称为宏。相反,VBA 代码被称为 VBA、代码、函数或过程。VBA 代码包含在类模块(是单个窗体或报表的组成部分,通常只包含这些对象的代码)和模块(未绑定到特定对象,通常包含可在整个数据库中使用的“全局”代码)中。
对象(如窗体和报表)和控件(如命令按钮和文本框)有很多事件属性。您可以将宏或过程附加到这些事件属性。每个事件属性都与一个特定事件(例如,单击鼠标、打开窗体或修改文本框中的数据)相关联。事件还可以被系统事件等 Access 外部因素所触发或者被附加到其他事件的宏或过程所触发。如果向多个对象的若干个事件属性添加多个宏或过程,那么您的数据库会变得很复杂,但是在大多数情况下,通过很少的编程就可以获得您想要的结果。
返回页首
我应该使用宏还是应该使用 VBA 代码?
您应该根据两个因素来决定使用宏还是使用 VBA 代码:安全性和所需的功能。之所以要考虑安全性,是因为 VBA 可用于创建危害数据安全或损坏计算机上的文件的代码。如果您使用的数据库是由其他人创建的,那么仅当您知道该数据库的来源可靠时才应该启用 VBA 代码。如果您创建的数据库将被其他人使用,那么您应该尽量避免包括需要用户特别准许数据库为可信状态的编程工具。避免需要用户信任您的数据库的一般技术将在本节后面的内容中讲述。
1
有关启用或禁用可能不安全的内容的详细信息,请参阅在 Office 文档中启用或禁用宏一文(如本文其他地方所提及的那样,大多数其他 Microsoft Office 程序使用术语“宏”来指代 VBA 代码,因此不要混淆该术语与 Access 宏)。
为了帮助确保数据库的安全,您应该尽量在能使用宏时就使用宏,且仅对使用宏操作无法完成的操作使用 VBA 编程。此外,您应该尽量只使用不需要准许数据库为可信状态就可以运行的宏操作。以这样的方式限制宏操作的使用使您的用户可以确信,数据库中不包含任何可能会损坏其计算机上的数据或其他文件的编程。
在某种程度上,为了鼓励广泛使用宏,Office Access 2007 包含许多新的宏操作,与 Access 的早期版本相比,使用这些新的宏操作可以生成功能更加强大的宏。例如,您现在可以通过使用宏操作来创建和使用全局临时变量,并且可以通过使用新的错误处理宏操作更恰当地处理错误。在 Access 的早期版本中,这些类型的功能只有使用 VBA 时才可用。此外,在 Access 2007 中,您可以直接将宏嵌入到对象或控件的事件属性中。嵌入的宏将变成该对象或控件的一部分,并随该对象或控件一起被移动或复制。在 Access 的早期版本中,宏必须作为单独对象维护,这有时会使您的数据库更难维护。
向对象或控件添加编程时,您应该考虑以这样的优先顺序来使用以下内容: 1. 2. 3.
宏,只包含不需要准许数据库为可信状态即可运行的操作 宏,包含需要准许数据库为可信状态才能运行的操作 VBA 过程
生成宏时,您可以在不需要准许数据库为可信状态即可运行的操作的短列表与所有宏操作的长列表之间进行切换,方法是在宏生成器中单击“显示所有操作”。单击“显示所有操作”还会显示 RunCommand 宏操作的完整参数列表。有关生成宏的详细信息,请参阅了解宏一节,或者访问请参阅一节中的链接。
宏提供了完成许多编程任务的简单方法,例如打开和关闭窗体以及运行报表。您可以轻松快捷地绑定您创建的数据库对象,因为几乎没有需要您记住的语法;每个操作的参数都显示在宏生成器中。
除了宏提供的增强的安全性和易用性之外,如果您想要执行下列操作,那么您必须使用宏:
? ?
将一个操作或一组操作分配给某个键。这需要创建一个名为 AutoKeys 的宏组。 在数据库首次打开时执行一个操作或一系列操作。这需要创建一个名为 AutoExec 的宏。
注释 AutoExec 宏在任何其他宏或 VBA 代码运行之前运行,即使您在“Access 选项”对话框中指定了启动
窗体并将宏或 VBA 代码附加到了该窗体的 OnOpen 或 OnLoad 事件中也是如此。
如果您要执行下列任一操作,那么应该使用 VBA 编程而不是宏:
?
使用内置函数或创建自己的函数 Access 中包括许多内置函数,例如 IPmt 函数,它可以计算应付利息。您可以使用这些内置函数执行计算,而无须创建复杂的表达式。通过使用 VBA 代码,您还可以创建自己的函数来执行超出表达式能力的计算或者替代复杂的表达式。此外,您还可以在表达式中使用您创建的函数向多个对象应用公共操作。
? ?
创建或操纵对象 在大多数情况下,您会发现在对象的“设计”视图中创建和修改对象最容易。然而,在某些情况下,您可能想在代码中操纵对象的定义。通过使用 VBA,除了可以操纵数据库本身以外,您还可以操纵数据库中的所有对象。 执行系统级操作 您可以在宏内执行 RunApp 操作,以便在 Access 中运行另一个程序(如 Microsoft Office Excel 2007),但您无法使用宏在 Access 外部执行更多其他操作。通过使用 VBA,您可以检查某个文件是否存在于计算机上,使用自动化或动态数据交换 (DDE) 与其他基于 Microsoft Windows 的程序(如 Office Excel 2007)通信,以及调用 Windows 动态链接库 (DLL) 中的函数。
2
?
一次一条地操纵记录 您可以使用 VBA 来逐条处理记录集,一次一条记录,并对每条记录执行操作。相反,宏将同时处理整个记录集。
如果您在分发给其他人的数据库中确实使用了 VBA 代码,您应该考虑将该数据库打包并进行签名,以便用户可以确信该代码来源可靠。有关对数据库进行打包和签名的详细信息,请参阅保护 Access 2007 数据库一文。
返回页首
使用“命令按钮向导”执行常见编程任务
如果您要向窗体中添加命令按钮,“命令按钮向导”可帮助您开始编程。该向导将指导您完成创建执行特定任务的命令按钮的过程。在 Office Access 2007 (.accdb) 文件中,该向导创建一个嵌入在命令按钮的 OnClick 属性中的宏。在 .mdb 或 .adp 文件中,该向导创建 VBA 代码,因为嵌入的宏在这些文件格式中不可用。不管在以上哪种情况下,此后您都可以修改或增强该宏或 VBA 代码,以便更好地满足您的需要。
1. 单击“Office 按钮” ,然后单击“打开”。
2. 3. 4.
在“打开”对话框中,选择并打开该数据库。
在导航窗格中,右键单击您要添加命令按钮的窗体,然后单击“设计视图”。 在“设计”选项卡上的“控件”组中,确保选中“使用控件向导”
。
5. 在“设计”选项卡上的“控件”组中,单击“按钮”。
6.
在窗体设计网格中,在您想要放置命令按钮的地方单击。
将会启动“命令按钮向导”。
7.
在该向导的第一页上,单击“类别”列表中的每个类别,查看该向导可以对命令按钮编程执行哪些操作。在“操作”列表中,选择您想要执行的操作,然后单击“下一步”。 8.
单击“文本”选项或“图片”选项,具体取决于您想要在命令按钮上显示文本还是图片。
? ?
如果您想要显示文本,您可以在“文本”选项旁边的框中编辑文本。
如果您想要显示图片,该向导会推荐列表中的一个图片。如果您想选择其他图片,请选中“显示所有图片”复选框来显示 Office Access 2007 提供的所有命令按钮图片,或者单击“浏览”选择存储在其他位置的图片。
单击“下一步”。
3
9. 为命令按钮输入一个有意义的名称。这是一个可选的步骤,并且此名称也不会显示在命令按钮上。但是,最好输入有意义的名称,以便以后当您需要引用该命令按钮(例如,如果您要为窗体上的控件设置 Tab 键次序)时,区分命令按钮会容易得多。例如,如果该命令按钮会关闭窗体,您可以将其命名为 cmdClose 或 CommandClose。
10. 单击“完成”。
Access 将命令按钮放在窗体上。
11. 如果您想查看该向导为您进行了哪些编程,请执行以下可选步骤:
1. 2. 3.
如果属性表尚未显示,请按 F4 来显示它。 单击属性表中的“事件”选项卡。 在“On Click”属性框中,单击
。
Access 将启动宏生成器并显示该向导创建的宏。如果需要,您可以编辑这个宏(有关编辑宏的详细信息,请参阅了解宏一节,或者访问请参阅一节中的链接)。完成后,在“设计”选项卡上的“关闭”组中,单击“关闭”以关闭宏生成器。如果 Access 提示您保存更改并更新属性,请单击“是”保存更改或单击“否”放弃更改。
1.
在“设计”选项卡上的“视图”组中,单击“查看”,然后单击“窗体视图”。单击新的命令按钮以确认它是否按预期的方式工作。
返回页首
了解宏
宏是一种工具,允许您自动执行任务和向窗体、报表和控件中添加功能。例如,如果您向窗体中添加了一个命令按钮,那么您将该按钮的 OnClick 事件属性与一个宏相关联,该宏包含您希望在每次单击该按钮时它所执行的命令。
您可以将 Access 宏看作是一种简化的编程语言,利用这种语言您通过生成要执行的操作的列表来创建代码。生成宏时,您从下拉列表中选择每个操作,然后为每个操作填写必需的信息。宏使您能够向窗体、报表和控件中添加功能而无须在 VBA 模块中编写代码。宏提供了 VBA 中可用命令的子集,并且大多数人都认为生成宏比编写 VBA 代码更容易。
您通过使用宏生成器来创建宏,下图显示了宏生成器。
4
显示宏生成器:
?
在“创建”选项卡上的“其他”组中,单击“宏”。如果此命令不可用,请单击“模块”或“类模块”按钮下面的箭头,然后单击“宏”。
有关创建宏的详细信息,请访问本文请参阅一节中的链接。
返回页首
了解 VBA 代码
VBA 是一种编程语言,您可以使用这种语言在 Access 中创建功能强大的应用程序。VBA 包括几百个命令,与使用 Access 宏相比,使用这些命令您可以执行复杂得多的操作。
您可以使用第三方控件来扩展 VBA 的功能,并且您可以编写自己的函数和过程来满足您的特定需要。您还可以使用 VBA 将 Access 与其他程序集成。
开始 VBA 编程的一种快速的方法就是首先生成一个 Access 宏,然后将其转换为 VBA 代码。执行此操作的说明在将宏转换为 VBA 代码一节中有述。此功能创建一个包含 VBA Function 过程的新模块,它执行与宏等效的操作。该模块还打开 Visual Basic 编辑器,以便您可以修改该过程。当您在 Visual Basic 编辑器中工作时,您可以单击关键字并按 F1 来启动“Access 开发人员帮助”并了解每个关键字的详细信息。然后您可以浏览“Access 开发人员帮助”并查找帮助您完成编程任务的新命令。
返回页首
5
将宏转换为 VBA 代码
您可以使用 Office Access 2007 自动将宏转换为 VBA 模块或类模块。您可以转换附加到窗体或报表的宏,而不管它们是作为单独的对象存在还是作为嵌入的宏存在。您还可以转换未附加到特定窗体或报表的全局宏。
转换附加到窗体或报表的宏
此过程将窗体或报表(或者其中的任意控件)引用(或嵌入在其中)的任意宏转换为 VBA,并向窗体或报表的类模块中添加 VBA 代码。该类模块将成为窗体或报表的组成部分,并且如果窗体或报表被移动或复制,它也随之移动。 1. 2.
在导航窗格中,右键单击该窗体或报表,然后单击“设计视图”。
在“数据库工具”选项卡上的“宏”组中,单击“将窗体的宏转换为 Visual Basic 代码”或“将报表的宏转换为 Visual Basic 代码”。 3.
在“转换窗体宏”或“转换报表宏”对话框中,选择是否希望 Access 向它生成的函数中添加错误处理代码。此外,如果您的宏内有任何注释,请选择是否希望将它们作为注释包括在函数中。单击“转换”继续。
如果该窗体或报表没有相应的类模块,Access 将创建一个类模块,并为与该窗体或报表关联的每个宏向该模块中添加一个过程。Access 还会更改该窗体或报表的事件属性,以便它们运行新的 VBA 过程,而不是宏。
4.
查看和编辑 VBA 代码:
1. 2.
当窗体或报表仍然在“设计”视图中打开时,如果属性表尚未显示,请按 F4 来显示它。 在属性表的“事件”选项卡上,在显示“[事件过程]”的任一属性框中单击,然后单击
。要查看特定控件的
事件属性,请单击该控件以选择它。要查看整个窗体或报表的事件属性,请在属性表顶部的下拉列表中选择“窗体”或“报表”。
Access 将打开 Visual Basic 编辑器,并在其类模块中显示事件过程。您可以向上或向下滚动来查看同一个类模块中的任何其他过程。
转换全局宏
1. 2. 3.
在导航窗格中,单击您要转换的宏的名称。
在“数据库工具”选项卡上的“宏”组中,单击“将宏转换为 Visual Basic 代码”。 在“转换宏”对话框中,选择所需的选项,然后单击“转换”。
Access 将转换宏并打开 Visual Basic 编辑器。
4.
查看和编辑 VBA 代码:
1. 2. 3.
在 Visual Basic 编辑器中,如果“工程资源管理器”窗格未显示,请在“视图”菜单上单击“工程资源管理器”。 展开您正在其中工作的数据库名称下面的树。 在“模块”下,双击模块“被转换的宏 宏名”。 Visual Basic 编辑器将打开该模块。
6
将 VBA 函数附加到事件属性
当您将全局宏转换为 VBA 时,VBA 代码将被放在标准模块中。与类模块不同,标准模块不是窗体或报表的组成部分。您很可能希望将该函数与窗体、报表或控件上的事件属性关联,以便代码能够精确地在您希望的时间和位置运行。为此,您可以将 VBA 代码复制到类模块中,然后将其与一个事件属性关联;或者您也可以使用以下过程在事件属性中执行一次特殊的调用,以调用该标准模块。 1. 2. 3. 4. 5. 6. 7. 8. 9.
在 Visual Basic 编辑器中,记录函数名称。例如,如果您转换是名为 MyMacro 的宏,则函数名称将为 MyMacro()。 关闭 Visual Basic 编辑器。
在导航窗格中,右键单击您要将函数与之关联的窗体或报表,然后单击“设计视图”。 单击您要将函数与之关联的控件或节。 如果属性表尚未显示,请按 F4 来显示它。
在属性表的“事件”选项卡上,单击您要将函数与之关联的事件属性框。
在该属性框中,键入一个等号 (=),后跟函数的名称,例如 =MyMacro()。请务必包括括号。 通过单击快速访问工具栏上的“保存”
来保存窗体或报表。
在导航窗格中,双击该窗体或报表,并测试它以查看代码是否按照预期的方式运行。
您现在知道了将 VBA 代码添加到数据库中的基本步骤。本文只提供了入门基础,还有许多优秀的参考书和联机资源可以帮助您提高编程技巧。
返回页首
学习如何使用帮助系统
Office Access 2007 提供了各种帮助您编程的方式。您可以单击 Access 窗口右上角的“帮助”按钮随时获得帮助。
Access 将显示“帮助”窗口。
此外,在您生成宏或 VBA 过程时,您可以单击宏操作、关键字或内置函数名称,然后按 F1。在大多数情况下,Access 将显示您所单击项目的帮助主题。
打开“帮助”窗口后,使用工具栏上的导航按钮在各页面之间移动。
例如,单击“开始”可查看目录,然后单击“后退”、“前进”、“停止”或“刷新”按钮可在主题间移动或重新加载某个主题。您还可以在工具栏正下方的框中输入搜索词,然后按 Enter 或单击“搜索”来搜索帮助系统,以查找特定的信息。
7
如果您要搜索关于编程的信息,除了 Access 帮助之外,浏览“Access 开发人员帮助”通常很有用。
切换到“Access 开发人员帮助”
1.
单击“搜索”按钮旁边的下拉箭头。
“帮助”窗口显示了您可以浏览的可用帮助主题列表。
2.
如果您连接到了 Internet,请在“来自 Office Online 的内容”下单击“开发人员参考”。我们建议使用这种方法,因为来自 Microsoft Office Online 网站的内容始终是最新的。如果您未连接到 Internet,或者系统管理员禁用了转到联机“帮助”窗口的功能,那么您仍然可以通过单击“来自此计算机的内容”下的“开发人员参考”来查看“Access 开发人员帮助”。 3. 4.
您可以使用以下两种方式浏览帮助:使用目录中的链接,或者在工具栏正下方的框中输入搜索词,然后按 Enter。 要切换回 Access 帮助,请单击“搜索”按钮旁边的下拉箭头,然后单击“来自 Office Online 的内容”或“来自此计算机的内容”下的“Access 帮助”。
有关使用脱机或联机帮助的详细信息,请单击“帮助”窗口右下角的“连接状态”菜单,然后单击“解释这些选项”。
8