1.3 Excel VBA应用程序结构
Excel的应用范围很广,使用VBA创建Excel应用程序没有一个固定的模式。下面简单介绍常见Excel VBA应用程序的结构。
1.3.1 Excel ⅤBA应用程序的构成
从开发者角度看,Excel VBA应用程序由工作表、用户窗体、模块和类模块等部分构成。
•工作表:用于保存和显示程序的数据,是程序的主体部分。一般先在工作表中制作出特定表格的格式,并设置好样式,再通过VBA代码获取表格中的数据,经过加工处理后将其填写入相应的单元格,供用户进行查看、打印输出等操作。
• 用户窗体:在Excel VBA应用程序中,除了可使用工作表与用户进行交互外,还可向程序添加用户窗体,用来与用户进行交互操作。使用用户窗体可将用户与工作表中的数据进行隔离,防止数据被意外修改并隐藏工作表中的敏感数据,使限制权限的用户只看到应该操作的数据。
• 模块:在模块中可保存程序的通用过程,供其他过程调用。例如录制宏的代码就保存在模块中。
• 类模块:在Excel VBA中,除了可使用系统提供的对象外,还可通过自定义类来创建自定义的对象,自定义的类必须保存在“类模块”中。大多数应用程序都不使用“类模块”。
1.3.2 事件驱动
Excel是工作在Windows环境下的应用程序,所以在Excel下开发的VBA应用程序与Windows环境保持了一定的相似性。Windows支持面向对象的事件驱动编程方式。
Windows操作系统连续监视每一个窗口的活动或事件的信号。事件可以通过诸如单击鼠标或按下按键等操作产生,也可以通过程序的控制而产生,甚至可以由另一个窗口的操作而产生。
在VBA中,通过事件驱动提供开发人员与系统之间的接口,开发人员通过编写事件过程来处理产生该事件时希望系统完成的工作(例如,单击鼠标就打开一个窗口)。
在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。
在事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发,也可以由操作系统或其他应用程序的消息触发,甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。
因为事件的顺序是无法预测的,所以在代码中必须对执行时的“各种状态”做一定的假设。当做出某些假设时(例如,假设在运行处理某一输入字段的过程之前,该输入字段必须包含确定的值),应该组织好应用程序的结构,以确保该假设始终有效(例如,在输入字段有值之前禁止使用启动该处理过程的命令按钮)。
在Excel中使用VBA开发应用程序,实质就是编写程序中各对象不同事件的代码。