Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。因此,对于在工作中需要经常使用Office 套装软件的用户,学用VBA 有助于使工作自动化,提高工作效率。另外,由于VBA 可以直接应用Office 套装软件的各项强大功能,所以对于程序设计人员的程序设计和开发更加方便快捷。
|
Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。因此,对于在工作中需要经常使用Office 套装软件的用户,学用VBA 有助于使工作自动化,提高工作效率。另外,由于VBA 可以直接应用Office 套装软件的各项强大功能,所以对于程序设计人员的程序设计和开发更加方便快捷。
11.1 VBA 基础 Visual Basic 的应用程序版(VBA)是Microsoft 公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。在没有VBA 以前,一些应用软件如Excel、Word、Access、Project 等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。VBA 作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA 与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。有了VBA 以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。 在Office 2000 中,宏语言VBA 适用于所有应用程序,包括Word 、 Excel、PowerPoint、Access、outlook 以及Project。在Office 97 的各应用程序中,新增了Visual Basic 编辑器。这样,用户无论是在Excel 中,还是在Word 中以至是在Access 中建立和管理VBA 都具有统一的方法和标准。 在介绍如何利用VBA 提高工作效率之前,首先介绍一些与VBA 有关的基础知识。
11.1.1 VB 与VBA VBA 是基于Visual Basic 发展而来的,它们具有相似的语言结构。Visual Basic 是Microsoft 的主要图形界面开发工具,VBA 5.0 (亦即VBA 97)则是Visual Basic 5.0 的子集。Visual Basic 是由Basic 发展而来的第四代语言。Visual Basic 作为一套独立的 Windows 系统开发工具,可用于开发Windows 环境下的各类应用程序,是一种可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。VB 的程序语言简单、便捷,利用其事件驱动的编程机制,新颖易用的可视化设计工具,并使用Windows 应用程序接口(API)函数,采用动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)以及开放式数据库访问(ODBC)等技术,可以高效、快速地编制出 Windows 环境下功能强大、图形界面丰富的应用软件系统。 Visual Basic 程序很大一部分以可视(Visual)形式实现,这意味着在设计阶段就可以看到程序运行的屏幕画面,用户可以在设计时能够方便地改动画面图像、大小、颜色等,直到满意为止。VB 的用户可以是缺乏Windows 及C 语言开发经验的专业软件人员,也可以是具有一定Windows 开发经验的专业人员,VB 的可视化编程方法使得原来繁琐枯燥、令人生畏的Windows 应用程序设计变得轻松自如、妙趣横生。以往的Windows 应用程序开发工具在设计图形用户界面时,都是采用编程的方法,并伴随大量的计算任务,一个大型应用程序约有90%的程序代码用来处理用户界面,而且在程序设计过程中不能看到界面显示的效果,只有在程序执行时才能观察到,如果界面效果不佳,还需要回到程序中去修改。Visual Basic 提供了新颖的可视化设计工具,巧妙地将Windows 界面设计的复杂性封装起来,程序开发人员不必再为界面设计而编写大量程序代码,仅需采用现有工具按设计者要求的布局,在屏幕上画出所需界面,并为各图形对象设置属性即可,VB 自动产生界面设计代码,这样便将事先编制好的控件可视地连接到一起,构成一个随时可调整的界面。 VBA 不但继承了VB 的开发机制,而且VBA 还具有与VB 相似的语言结构,它们的集成开发环境IDE(Intergrated Development Environment)也几乎相同。但是,经过优化,VBA 专门用于Office 的各应用程序。VB 可运行直接来自Windows 95 或NT 桌面上的应用程序,而VBA 的项目(Project)仅由使用VBA 的Excel、Word、 PowerPoint 等称为宿主(Host)的Office 应用程序(Application)来调用。
11.1.2 WordBasic 和 Visual Basic 在 Word 中,为完成具体的任务,所用的是WordBasic 命令。 WordBasic 是从VBA 扩展而来的一种专用于处理Word 自动功能的语言,下面介绍它们在概念上的区别和它们的宏的相互转换。
11.1.2.1 WordBasic 和 Visual Basic 在概念上的区别 VBA 和WordBasic 之间主要的区别是 WordBasic 语言包含由大约 900 个命令组成的一张平面列表,而 Visual Basic 则包含了由对象组成的一个分层结构,每个对象都可提供一组特定方法和属性(与 WordBasic 中的语句和函数相似)。大多数 WordBasic 命令在任何时候都可运行,而 Visual Basic 只在特定的时候提供有效对象的方法和属性。 注意: 本书提到的Visual Basic 如果不加特别说明,都是指Visual Basic For Applications。 对象是 Visual Basic 这一宏伟大厦的基石,在 Visual Basic 中进行的几乎任何操作都与修改对象有关。Word 的任何元素(如文档、段落、域、书签等),都可以用 Visual Basic 中的对象来代表。与平面列表中的命令不同,部分对象只能通过其他对象才能加以访问。例如,可以通过不同的对象(如 Style、Selection 和 Find 对象)来访问 Font 对象。 应用加粗格式的编程任务就表明了两种编程语言之间的区别。下面的 WordBasic 指令对所选内容应用加粗格式。 下面的示例是 Visual Basic 语句,也是对所选内容应用加粗格式。 Selection.Font.Bold = True Visual Basic 不包含 Bold 语句和函数,却有一个名为 Bold 的属性(属性通常指一个对象的特性,例如大小、颜色,或者是否是加粗)。Bold 是 Font 对象的一个属性。同样地,Font 是返回一个 Font 对象的 Selection 对象的一个属性。按照下面的对象结构,可以生成指令,以将加粗格式应用于所选内容。 Bold 属性是一个 Boolean 类型、可读写的属性。这意味着可以将 Bold 属性设置为 True 或 False(真或假),也可返回当前值。下面 WordBasic 指令的返回值表明是否将加粗格式应用于所选内容。 x = Bold() 下面的示例是 Visual Basic 语句,返回所选内容的加粗格式的状态。 x = Selection.Font.Bold 要在 Visual Basic 中执行一个任务,就需要确定合适的对象。例如,如果用户想应用【字体】对话框中的字符格式,可使用 Font 对象。然后需要确定如何理顺从 Application 对象到 Font 对象的 Word 对象结构,以找到包含需要修改的 Font 对象的对象。在确定了该对象的路径之后(例如,Selection.Font),可使用 Visual Basic 编辑器中的【对象浏览器】、【帮助】或【自动列表成员】之类的功能来确定可将什么属性和方法应用于该对象。
11.1.2.2 将 WordBasic 宏转换为 Visual Basic 宏可使任务自动化,如果在 Word 中重复进行某项工作,可用宏使其自动执行。宏是将一系列的 Word 命令和指令组合在一起,形成一个命令,以实现任务执行的自动化。用户可创建并执行一个宏,以替代人工进行一系列费时而重复的 Word 操作。事实上,它是一个自定义命令,用来完成所需任务。 宏的一些典型应用如:加速日常编辑和格式设置、组合多个命令、使对话框中的选项更易于访问、使一系列复杂的任务自动执行等。 Word 提供了两种创建宏的方法:宏录制器和 Visual Basic 编辑器。宏录制器可帮助用户开始创建宏。Word 在 VBA 编程语言中把宏录制为一系列的 Word 命令。可在 Visual Basic 编辑器中打开已录制的宏,修改其中的指令。也可用 Visual Basic 编辑器创建包括 Visual Basic 指令的非常灵活和强有力的宏,这些指令无法采用录制的方式。 当第一次进行下列任何操作时,Word 2000 将自动转换 Word 6.x 或 Word 95 模板中的宏。 宏里面的每个 WordBasic 语句和函数都转换为相应的 WordBasic 方法。转换过程将每个宏都转换为 Visual Basic 模块。如要查看转换过的宏,可在【工具】菜单上将鼠标指向【宏】,并单击【宏】命令。在【宏】对话框中的宏名称显示为 macroname.Main,其中 Main 指转换宏中的主子程序(该子程序在以前版本的 Word 中以 Sub MAIN 开头)。要编辑转换过的宏,可选择一个宏名,单击【编辑】按钮,就可在 Visual Basic 编辑器中显示该 Visual Basic 模块。 Sub MAIN FormatFont .Name = "Arial", .Points = 10 Insert "Hello World" End Sub 当该模板在 Word 2000 中打开时,该宏转换为下列代码。 Public Sub Main() WordBasic.FormatFont Font:="Arial", Points:=10 WordBasic.Insert "Hello World" End Sub [NextPage] 转换过的宏中的每个语句以 WordBasic 属性(WordBasic 属性返回一个自动化对象【Word.Basic】,该对象包含了在 Word 6.0 和 Word for Windows 95 中所有可用的 WordBasic 语句和函数的方法)开头。WordBasic 是 Word 2000 对象模型中的一个属性,该模型返回一个对象及所有的 WordBasic 语句和函数;该对象使得在 Word 2000 中运行 WordBasic 宏成为可能。 注意: 如果在保存该模板时覆盖原来的模板,则该 WordBasic 宏会永久地丢失,并且以前版本的 Word 也不能使用转换过的宏。 Word 97 中的宏在Word 2000 中像在Word 97 中一样使用而无需转换。 下面的 Visual Basic 宏与以前的 WordBasic 宏的功能相同,但是没有使用 WordBasic 属性。 Public Sub Main() With Selection.Font .Name = "Arial" .Size = 10 End With Selection.TypeText Text:="Hello World" End Sub 下面的示例是用 Word.Basic 对象新建一篇文档,然后插入有效字体的名称。每个字体名称以与之相应的字体显示。如:“楷体,隶书、宋体”。 With WordBasic .FileNewDefault For aCount = 1 To .CountFonts() .Font .[Font$](aCount) .Insert .[Font$](aCount) .InsertPara Next End With
11.1.3 对象、属性和方法
11.1.3.1 Word 对象 VBA 与传统宏语言的重要区别之一就在于它是面向对象的。对象是为了在VBA 程序中管理数据和代码的方便提出来的。在VBA 中,对象是封装有数据和代码的客体。例如,UserForm 对象是一个窗口或对话框,用以构成应用的用户界面部分。 Word 对象是VBA 为Word 编程所采取的看待世界的方法。对象代表一个Word 的元素,如文档、段落、书签或单个的字符。集合是一个对象,该对象包含其他数个对象,通常这些对象属于相同的类型。例如,一个集合对象中可包含文档中的所有书签对象。通过使用属性和方法,可以修改单个的对象,也可修改整个的对象集合。 在一个应用程序中,最高级别的对象通常是Application 对象,它就是应用程序本身。例如, 在Microsoft Word 对象中的 Application 对象就是Microsoft Word 本身。在Application 对象中包含了一些其他的对象,例如,在Microsoft Word 的Application 对象中包含了Document、Windows、Selection 等对象。因为Document 对象的存在依赖于Word 的Application 对象的存在,所以此 Document 对象被称之为Application 对象的子对象(Child),反过来,此Application 对象被称为Document 对象的父对象(Parent)。许多子对象又有它们自己的子对象。例如,在Microsoft Excel 中, Documents 对象包含了Document 对象,或者说,它是Document 对象的父对象,一个父对象可以拥有多个子对象;例如,Word 的Windows对象拥有Panes、Selection 以及Object 等子对象。同样,一个子对象也可以拥有多个父对象;例如,Word 的Windows 集合对象同时是Application 对象和Document 对象两者的子对象。对象组成应用程序的方法彼此之间按照它们被分开的内容的功能又相互联系起来,这叫做对象的分层结构(Objecthierarchy)或是对象的模型(Object model),如图11-1 所示为Microsoft Word 对象的结构模型图。
属性是对象的一个特性或者该对象操作的一个方面。例如,文档属性包含名称、内容、保存状态,以及是否启用修订。要设置一个属性的值,可在对象的后面带一个句号、属性名、一个等号和新的属性值。下面的示例在“MyDoc.doc”文档中启用修订。 Documents("MyDoc.doc").TrackRevisions = True 在本例中,Documents 引用由打开的文档构成的集合,而 “ MyDoc.doc ” 识别集合中的一篇文档, 为该文档设置了 TrackRevisions 属性。 方法是对象可以进行的动作。例如,可打印一篇文档,因而 Document 对象也具有PrintOut 方法。方法通常都具有参数,指明动作是如何进行的。下面的示例是打印活动文档的前三页。 ActiveDocument.PrintOut From:=1,To:=3 在大多数情况下,方法是动作,而属性是性质。使用方法可使对象发生某些事情,而使用属性则可返回对象的信息,或者引起对象的某个性质的更改。 可以利用对象与对象集的属性(Properties)和方法(Methods)对对象进行操作。关于属性与方法的概念在下一节介绍。 操作对象首先应调用该对象,可以有以下两种方法: 显示调用方法需要较多的代码,但不易混淆;隐示调用方法代码少,但容易混淆,应用时应该慎重。
11.1.3.2 对象的属性、方法和事件 方法指的是对象能执行的动作。如果对象共享共同的方法,则可以操作整个对象集合。例如,下列的过程会关闭所有打开的窗体。 Sub CloseAll() Forms.Close End Sub 又例如,Add 是属于 ComboBox 对象的一个方法,因为它会增加一个新项到下拉式列表框中。 下面的程序使用 Add 方法,增加一个新的工程到 ComboBox 中。 Sub AddEntry(newEntry as String) Combo1.Add newEntry End Sub 属性定义了对象的特征,诸如大小、颜色或屏幕位置,或某一方面的行为,诸如对象是否有激活或可见的。可以通过修改对象的属性值来改变对象的特性。 若要设置属性值,则在对象的引用后面加上一个复合句,它是由属性名加上等号(=)以及新的属性值所组成的。例如,下面的过程通过设置窗体中的 Caption 属性来更改 Visual Basic 窗体的标题。 Sub ChangeName(newTitle) myForm.Caption = newTitle End Sub 有些属性并不能设置。每一个属性的帮助主题,会指出是否可以设置此属性(读与写),或只能读取此属性(只读),还是只能写入此属性(只写)。 可以通过属性的返回值,来检索对象的信息。下列的过程使用一个消息框来显示当前活动文档的标题,它显示在当前活动窗体顶部。 Sub GetFormName() formName = Screen.ActiveForm.Caption MsgBox formName End Sub 事件是一个对象可以辨认的动作,像单击鼠标或按下某键等,并且可以写某些代码针对所述动作来做响应。用户做动作或程序代码的结果可能导致事件的发生,或是由系统 引发。 |