利用VBA提高工作效率_第1页
利用VBA提高工作效率_第2页
利用VBA提高工作效率_第3页
利用VBA提高工作效率_第4页
利用VBA提高工作效率_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、第十一章 利用VBA提高工作效率Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。因此,对于在工作中需要经常使用Office 套装软件的用户,学用VBA 有助于使工作自动化,提高

2、工作效率。另外,由于VBA 可以直接应用Office套装软件的各项强大功能,所以对于程序设计人员的程序设计和开发更加方便快捷。11.1 VBA 基础Visual Basic 的应用程序版(VBA)是Microsoft 公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。在没有VBA 以前,一些应用软件如Excel、Word、Access、Project 等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。拥有一种可跨越多个应用软件,使各应用软

3、件产品具有高效、灵活且一致性的开发工具是至关重要的。VBA 作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA 与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。有了VBA 以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。在Office 2000 中,宏语言VBA 适用于所有应用程序,包括Word 、Excel、PowerPoint、Access、Outl

4、ook 以及Project。在Office 97的各应用程序中,新增了Visual Basic 编辑器。这样,用户无论是在Excel 中,还是在Word 中以至是在Access 中建立和管理VBA都具有统一的方法和标准。在介绍如何利用VBA 提高工作效率之前,首先介绍一些与VBA 有关的基础知识。11.1.1 VB 与VBAVBA 是基于Visual Basic 发展而来的,它们具有相似的语言结构。Visual Basic 是Microsoft 的主要图形界面开发工具,VBA 5.0(亦即VBA 97)则是Visual Basic 5.0 的子集。Visual Basic 是由Basic 发展

5、而来的第四代语言。Visual Basic 作为一套独立的Windows 系统开发工具,可用于开发Windows 环境下的各类应用程序,是一种可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。VB的程序语言简单、便捷,利用其事件驱动的编程机制,新颖易用的可视化设计工具,并使用Windows 应用程序接口(API)函数,采用动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)以及开放式数据库访问(ODBC)等技术,可以高效、快速地编制出Windows 环境下功能强大、图形界面丰富的应用软件系统。Visual Basic 程

6、序很大一部分以可视(Visual)形式实现,这意味着在设计阶段就可以看到程序运行的屏幕画面,用户可以在设计时能够方便地改动画面图像、大小、颜色等,直到满意为止。VB 的用户可以是缺乏Windows 及C 语言开发经验的专业软件人员,也可以是具有一定Windows 开发经验的专业人员,VB 的可视化编程方法使得原来繁琐枯燥、令人生畏的Windows 应用程序设计变得轻松自如、妙趣横生。以往的Windows 应用程序开发工具在设计图形用户界面时,都是采用编程的方法,并伴随大量的计算任务,一个大型应用程序约有90%的程序代码用来处理用户界面,而且在程序设计过程中不能看到界面显示的效果,只有在程序执行

7、时才能观察到,如果界面效果不佳,还需要回到程序中去修改。Visual Basic 提供了新颖的可视化设计工具,巧妙地将Windows 界面设计的复杂性封装起来,程序开发人员不必再为界面设计而编写大量程序代码,仅需采用现有工具按设计者要求的布局,在屏幕上画出所需界面,并为各图形对象设置属性即可,VB 自动产生界面设计代码,这样便将事先编制好的控件可视地连接到一起,构成一个随时可调整的界面。VBA 不但继承了VB 的开发机制,而且VBA 还具有与VB 相似的语言结构,它们的集成开发环境IDE(Intergrated DevelopmentEnvironment)也几乎相同。但是,经过优化,VBA

8、专门用于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 自动功能的语言,下面介绍它们在概念上的区别和它们的宏的相互转换。 WordBasic 和Visual Basic

9、 在概念上的区别VBA 和WordBasic 之间主要的区别是WordBasic 语言包含由大约900 个命令组成的一张平面列表,而Visual Basic 则包含了由对象组成的一个分层结构,每个对象都可提供一组特定方法和属性(与WordBasic 中的语句和函数相似)。大多数WordBasic 命令在任何时候都可运行,而Visual Basic 只在特定的时候提供有效对象的方法和属性。注意:本书提到的Visual Basic 如果不加特别说明,都是指VisualBasic For Applications。对象是Visual Basic 这一宏伟大厦的基石,在Visual Basic 中进行

10、的几乎任何操作都与修改对象有关。Word 的任何元素(如文档、段落、域、书签等),都可以用Visual Basic 中的对象来代表。与平面列表中的命令不同,部分对象只能通过其他对象才能加以访问。例如,可以通过不同的对象(如Style、Selection 和Find 对象)来访问Font 对象。应用加粗格式的编程任务就表明了两种编程语言之间的区别。下面的WordBasic 指令对所选内容应用加粗格式。下面的示例是Visual Basic 语句,也是对所选内容应用加粗格式。Selection.Font.Bold = TrueVisual Basic 不包含Bold 语句和函数,却有一个名为Bold

11、 的属性(属性通常指一个对象的特性,例如大小、颜色,或者是否是加粗)。Bold 是Font 对象的一个属性。同样地,Font 是返回一个Font 对象的Selection 对象的一个属性。按照下面的对象结构,可以生成指令,以将加粗格式应用于所选内容。Bold 属性是一个Boolean 类型、可读写的属性。这意味着可以将Bold 属性设置为True 或False(真或假),也可返回当前值。下面WordBasic 指令的返回值表明是否将加粗格式应用于所选内容。x = Bold()下面的示例是Visual Basic 语句,返回所选内容的加粗格式的状态。x = Selection.Font.Bold

12、要在Visual Basic 中执行一个任务,就需要确定合适的对象。例如,如果用户想应用【字体】对话框中的字符格式,可使用Font对象。然后需要确定如何理顺从Application 对象到Font 对象的Word 对象结构,以找到包含需要修改的Font 对象的对象。在确定了该对象的路径之后(例如,Selection.Font),可使用Visual Basic编辑器中的【对象浏览器】、【帮助】或【自动列表成员】之类的功能来确定可将什么属性和方法应用于该对象。 将WordBasic 宏转换为Visual Basic宏可使任务自动化,如果在Word 中重复进行某项工作,可用宏使其自动

13、执行。宏是将一系列的Word 命令和指令组合在一起,形成一个命令,以实现任务执行的自动化。用户可创建并执行一个宏,以替代人工进行一系列费时而重复的Word 操作。事实上,它是一个自定义命令,用来完成所需任务。宏的一些典型应用如:加速日常编辑和格式设置、组合多个命令、使对话框中的选项更易于访问、使一系列复杂的任务自动执行等。Word 提供了两种创建宏的方法:宏录制器和Visual Basic 编辑器。宏录制器可帮助用户开始创建宏。Word 在VBA 编程语言中把宏录制为一系列的Word 命令。可在Visual Basic 编辑器中打开已录制的宏,修改其中的指令。也可用Visual Basic 编

14、辑器创建包括Visual Basic 指令的非常灵活和强有力的宏,这些指令无法采用录制的方式。当第一次进行下列任何操作时,Word 2000 将自动转换Word 6.x或Word 95 模板中的宏。 打开该模板。 基于该模板创建一篇新文档。 使用【工具】菜单中的【模板】命令将模板附加给一篇文档。在转换宏时,在状态栏会显示一条信息。转换结束后,必须保存模板,以保存转换后的宏。如果不保存模板,那么下次使用该模板时,Word 会再次转换这些宏。宏里面的每个WordBasic 语句和函数都转换为相应的WordBasic 方法。转换过程将每个宏都转换为Visual Basic 模块。如要查看转换过的宏,

15、可在【工具】菜单上将鼠标指向【宏】,并单击【宏】命令。在【宏】对话框中的宏名称显示为macroname.Main,其中Main 指转换宏中的主子程序(该子程序在以前版本的Word 中以Sub MAIN 开头)。要编辑转换过的宏,可选择一个宏名,单击【编辑】按钮,就可在Visual Basic 编辑器中显示该Visual Basic模块。对每个WordBasic 语句进行修改,以适应VBA。转换过的WordBasic 宏的功能与编写或录制的新VBA 宏相同,但并不完全相同。下面的示例是一个Word 95 模板中的WordBasic 宏。Sub MAINFormatFont .Name = Ari

16、al, .Points = 10Insert Hello WorldEnd Sub当该模板在Word 2000 中打开时,该宏转换为下列代码。Public Sub Main()WordBasic.FormatFont Font:=Arial, Points:=10WordBasic.Insert Hello WorldEnd Sub转换过的宏中的每个语句以WordBasic 属性(WordBasic 属性返回一个自动化对象【Word.Basic】,该对象包含了在Word 6.0 和Word for Windows 95 中所有可用的WordBasic 语句和函数的方法)开头。WordBasic

17、 是Word 2000 对象模型中的一个属性,该模型返回一个对象及所有的WordBasic 语句和函数;该对象使得在Word2000 中运行WordBasic 宏成为可能。注意:如果在保存该模板时覆盖原来的模板,则该WordBasic 宏会永久地丢失,并且以前版本的Word 也不能使用转换过的宏。Word 97 中的宏在Word 2000 中像在Word 97 中一样使用而无需转换。下面的Visual Basic 宏与以前的WordBasic 宏的功能相同,但是没有使用WordBasic 属性。Public Sub Main()With Selection.Font.Name = Arial.

18、Size = 10End WithSelection.TypeText Text:=Hello WorldEnd Sub下面的示例是用Word.Basic 对象新建一篇文档,然后插入有效字体的名称。每个字体名称以与之相应的字体显示。如:“楷体,隶书、宋体”。With WordBasic.FileNewDefaultFor aCount = 1 To .CountFonts().Font .Font$(aCount).Insert .Font$(aCount).InsertParaNextEnd With11.1.3 对象、属性和方法 Word 对象VBA 与传统宏语言的重要区别

19、之一就在于它是面向对象的。对象是为了在VBA 程序中管理数据和代码的方便提出来的。在VBA 中,对象是封装有数据和代码的客体。例如,UserForm 对象是一个窗口或对话框,用以构成应用的用户界面部分。Word 对象是VBA 为Word 编程所采取的看待世界的方法。对象代表一个Word 的元素,如文档、段落、书签或单个的字符。集合是一个对象,该对象包含其他数个对象,通常这些对象属于相同的类型。例如,一个集合对象中可包含文档中的所有书签对象。通过使用属性和方法,可以修改单个的对象,也可修改整个的对象集合。在一个应用程序中,最高级别的对象通常是Application 对象,它就是应用程序本身。例如

20、, 在Microsoft Word 对象中的Application 对象就是Microsoft Word 本身。在Application 对象中包含了一些其他的对象,例如,在Microsoft Word 的Application对象中包含了cocument、Windows、Selection 等对象。因为Document对象的存在依赖于Word 的Application 对象的存在,所以此Document 对象被称之为Application 对象的子对象(Child),反过来,此Application 对象被称为Document 对象的父对象(Parent)。许多子对象又有它们自己的子对象。例

21、如,在Microsoft Excel 中,Documents 对象包含了Document 对象,或者说,它是Document 对象的父对象,一个父对象可以拥有多个子对象;例如,Word 的Windows对象拥有Panes、Selection 以及Object 等子对象。同样,一个子对象也可以拥有多个父对象;例如,Word 的Windows 集合对象同时是Application 对象和Document 对象两者的子对象。对象组成应用程序的方法彼此之间按照它们被分开的内容的功能又相互联系起来,这叫做对象的分层结构(Objecthierarchy)或是对象的模型(Object model),如图11

22、-1 所示为Microsoft Word 对象的结构模型图。图11-1 对象结构模型图属性是对象的一个特性或者该对象操作的一个方面。例如,文档属性包含名称、内容、保存状态,以及是否启用修订。要设置一个属性的值,可在对象的后面带一个句号、属性名、一个等号和新的属性值。下面的示例在“MyDoc.doc”文档中启用修订。Documents(MyDoc.doc).TrackRevisions = True在本例中,Documents 引用由打开的文档构成的集合,而“ MyDoc.doc ” 识别集合中的一篇文档, 为该文档设置了TrackRevisions 属性。方法是对象可以进行的动作。例如,可打印

23、一篇文档,因而Document 对象也具有PrintOut 方法。方法通常都具有参数,指明动作是如何进行的。下面的示例是打印活动文档的前三页。ActiveDocument.PrintOut From:=1,To:=3在大多数情况下,方法是动作,而属性是性质。使用方法可使对象发生某些事情,而使用属性则可返回对象的信息,或者引起对象的某个性质的更改。可以利用对象与对象集的属性(Properties)和方法(Methods)对对象进行操作。关于属性与方法的概念在下一节介绍。操作对象首先应调用该对象,可以有以下两种方法: 显示调用方法(Calling it explicitly)。要根据该对象在对象模

24、型中的明确位置进行指向。 隐示调用方法(Calling it implicitly)。不必指出对象在对象模型中的位置,只需确保此操作不会引起混淆与错误。例如,你要调用某文档对象,对此进行操作,如果能确定该文档是Word 当前(激活)文档,就可以直接对此进行操作,不会发生混淆,因为Word 中当前文档是唯一的。显示调用方法需要较多的代码,但不易混淆;隐示调用方法代码少,但容易混淆,应用时应该慎重。 对象的属性、方法和事件方法指的是对象能执行的动作。如果对象共享共同的方法,则可以操作整个对象集合。例如,下列的过程会关闭所有打开的窗体。Sub CloseAll()Forms.Clos

25、eEnd Sub又例如,Add 是属于ComboBox 对象的一个方法,因为它会增加一个新项到下拉式列表框中。下面的程序使用Add 方法,增加一个新的工程到ComboBox 中。Sub AddEntry(newEntry as String)Combo1.Add newEntryEnd Sub属性定义了对象的特征,诸如大小、颜色或屏幕位置,或某一方面的行为,诸如对象是否有激活或可见的。可以通过修改对象的属性值来改变对象的特性。若要设置属性值,则在对象的引用后面加上一个复合句,它是由属性名加上等号(=)以及新的属性值所组成的。例如,下面的过程通过设置窗体中的Caption 属性来更改Visual

26、 Basic 窗体的标题。Sub ChangeName(newTitle)myForm.Caption = newTitleEnd Sub有些属性并不能设置。每一个属性的帮助主题,会指出是否可以设置此属性(读与写),或只能读取此属性(只读),还是只能写入此属性(只写)。可以通过属性的返回值,来检索对象的信息。下列的过程使用一个消息框来显示当前活动文档的标题,它显示在当前活动窗体顶部。Sub GetFormName()formName = Screen.ActiveForm.CaptionMsgBox formNameEnd Sub事件是一个对象可以辨认的动作,像单击鼠标或按下某键等,并且可以写

27、某些代码针对所述动作来做响应。用户做动作或程序代码的结果可能导致事件的发生,或是由系统引发。11.2 使用Visual Basic 编辑器上面已经讲到,Word 在VBA 编程语言中把宏录制为一系列的Word 命令,然后在Visual Basic 编辑器中打开已录制的宏,修改其中的指令。也可用Visual Basic 编辑器创建包括Visual Basic指令的非常灵活和强有力的宏,而那些指令是无法采用录制的方法的。在Word 中打开Visual Basic 编辑器的方法是:指向【工具】菜单中的【宏】菜单项,然后从其级联菜单中单击【Visual Basic 编辑器】命令,即可打开如图11-2

28、所示的Visual Basic 编辑器。图11-2 Visual Basic 编辑器注意:如果用此命令打不开Visual Basic 编辑器,说明文档和Normal模板可能已经被宏病毒感染了,因为一般的宏病毒都会把【VisualBasic 编辑器】命令屏蔽。此时可以把当前用户的Normal 模板删除,用没有被感染的Normal 代替或者不要Normal 模板,然后再重新打开Word,就可以打开Visual Basic 编辑器。下面简单介绍一下Visual Basic 编辑器的方法。11.2.1 利用好窗口Visual Basic 编辑器中根据不同的对象,设置了不同的窗口。如果能恰当地使用这些窗

29、口,可以使编程效率有极大的提高。VisualBasic 编辑器中主要的窗口包括代码窗口、立即窗口、本地窗口、对象浏览器、工程资源管理器、属性窗口、监视窗口以及工具箱和用户窗体窗口等。 【代码】窗口可以使用【代码】窗口来编写、显示以及编辑Visual Basic【代码】。打开各模块的代码窗口后,可以查看不同窗体或模块中的代码,并且在它们之间做复制以及粘贴的动作。如图11-3 所示。图11-3 【代码】窗口可以按照下列所述的方式,来打开【代码】窗口:在工程窗口中,可以选择一个窗体或模块,然后选择【查看代码】按钮。在【用户窗体】窗口中,可以双击控件或窗体;也可以从【视图】菜单中选择【

30、代码窗口】,或者按下F7 键。在【代码】窗口中可以将所选文本拖动到当前代码窗口中的不同位置,也可以拖动到其他的【代码】窗口或者立即窗口以及监视窗口,甚至【回收站】中。在【代码】窗口中,左上角的下拉列表框为【对象】框,用来显示所选对象的名称。用户可以按下列表框中的右边箭头,来显示此窗体中的对象。【对象】框右边的下拉列表框为【过程/事件】框,它列出了【窗体】或【对象】框所含控件中的所有Visual Basic 的事件。当选择了一个事件,则与事件名称相关的事件过程就会显示在代码窗口中。如果在【对象】框中显示的是【通用】,则【过程】框会列出所有声明,以及为此窗体所创建的常规过程。如果正在编辑模块中的代

31、码,则【过程】框会列出所有模块中的常规过程。在上述两实例中,在【过程】框中所选的过程都会显示在代码窗口中。模块中的所有过程会出现在一个单一滚动条的列表中,它们是按名称的字母来排列的。可以从代码窗口上端的下拉式列表中选取一个过程,此时指针会移到所选过程的第一行代码上面。将拆分栏向下拖放,可以将代码窗口分隔成两个水平窗格,两者都具有滚动条。可以在同一时间查看代码中的不同部分。显示在对象框以及【过程/事件】框中的信息,是以当前拥有焦点的窗格之内的代码为准。将拆分栏拖放到窗口的顶部或下端,或者双击拆分栏,都可以关闭一个窗格。代码窗口的左边的灰色区域为边界标识条,在此会显示出边界标识,在边界标识条上单击

32、鼠标,可以在对应的行上添加断点。单击【过程查看】图标,可以显示所选的过程,同一时间只能在【代码】窗口中显示一个过程。单击【全模块查看】图标,显示模块中全部的代码。 【立即窗口】【立即窗口】在中断模式时会自动打开,且其内容是空的。用户可以在窗口中执行如下操作:键入或粘贴一行代码,然后按下Enter 键来执行该代码。从【立即窗口】中复制并粘贴一行代码到【代码】窗口中,但是【立即窗口】中的代码是不能存储的。【立即窗口】在调试程序过程中非常有用,用户如果要测试某个语法或者查看某个变量的值,就需要用到【立即窗口】。因为在【立即窗口】中,输入一行语句后按Enter 键即可执行,如图11-4

33、 所示。图11-4 在【立即窗口】中输入一条语句与运行的结果【立即窗口】可以拖放到屏幕中的任何地方,除非已经在【选项】对话框中的【可连接的】选项卡内,将它设定为停放窗口。可以按下关闭框来关闭一个窗口。如果关闭框不是可见的,可以先双击窗口标题行,让窗口变成可见的。注意:在中断模式下,立即窗口中的语句,是根据显示在过程框的内容或范围来执行的。举例来说,如果键入Print variablename,则输出的就是局域变量的值。这和在程序中止时Print 方法在正在执行的过程产生一样。 【本地窗口】可自动显示出所有在当前过程中的变量声明及变量值。若【本地窗口】为可见的,则每当从执行方式切

34、换到中断模式或是操纵堆栈中的变量时,它就会自动地重建显示,如图11-5 所示。图11-5 【本地窗口】下面介绍窗口中各对象的意义:【调用堆栈】按钮:打开【调用堆栈】对话框,它会列出调用堆栈中的过程,如图11-6 所示。图11-6 【调用堆栈】对话框【表达式】:列出变量的名称,不能在此编辑数据。列表中的第一个变量是一个特殊的模块变量,可用来扩充显示出当前模块中的所有模块层次变量。对于类模块,会定义一个系统变量。对于常规模块,第一个变量是。全局变量以及其他工程中的变量,都不能从【本地窗口】中访问。【值】:列出所有变量的值。所有的数值变量都应该有一个值,而字符串变量则可以有空值。当按下【值】字段中的

35、一个值,指针就会变成“I”形,且值会被点划线包围。可以编辑一个值,并且按下ENTER 键,向上键,向下键,TAB 键,SHIFT+TAB 键或用鼠标在屏幕上单击,使编辑生效。如果这个值是非法的,则所编辑的字段的值会以突出显示,并且会出现一个错误信息框来提示,此时可以按下ESC 键来中止更改。拥有子变量的变量可以被扩充或折叠起来。折叠起来的变量不会显示一个值,而变量每一次会显示一个值,并且出现在变量的左边。【类型】:列出变量的类型,不能在此编辑数据。 对象浏览器显示出对象库以及工程的过程的可用类、属性、方法、事件及常数变量。用户可以用它来搜索及使用既有的对象,或是来源于其他应用程

36、序的对象。单击【视图】菜单中的【对象浏览器】命令或者按F2 键,即可显示如图11-7 所示的【对象浏览器】对话框。图11-7 【对象浏览器】对话框【搜索文本】框包含要用来做搜索的字符串。可以键入或选择所要的字符串。搜索文本框中包含最后四次输入的搜索字符串,直到关闭此工程为止。在键入字符串时,可以使用标准的Visual Basic通配符。如果要查找完全相符的字符串,可以用快捷菜单中的【全字匹配】命令。输入搜索的字符串完毕后单击【搜索】按钮,即可激活类或属性、方法、事件或常数等符合在【搜索文本】框中键入字符串的库搜索,并且打开有适当信息列表的【搜索结果】框。如果单击【显示/隐藏搜索结果】按钮,可以

37、打开或隐藏【搜索结果】框。【搜索结果】框改变成显示从【工程/库】列表中所选出的工程或库的搜索结果。搜索结果会默认地按类型创建组并从A到Z 排列。 工程资源管理器工程资源管理器是Visual Basic 编辑器中用以显示VBA 项目成员的窗口。VBA 项目成员是指与用户文档相关的用户自定义窗体(Form)、模块(Modules)和Office 2000 对象(Microsoft Object)等。窗体、模块和Office 2000 对象等的集合构成了VBA 项目。VBA项目成员以树形结构显示,以便于用户查看和使用VBA 项目及其成员。工程资源管理器显示与用户在Office 200

38、0 中打开的每一个文档相关的VBA 项目。例如,在Word 2000 中,若用户打开了三个文档,那么工程资源管理器将显示与这三个文档有关的VBA 项目,如图11-8 所示。图11-8 工程资源管理器在图11-8 所示的工程资源管理器中,每一个文档构成了一个独立的VBA 项目。与文档相关的模块、工作表、窗体等均被视为一个独立的对象(VBA 项目成员)。工程资源管理器允许用户方便地选择要使用的对象。在用户选择了要编辑的对象以后,Visual Basic 编辑器自动打开相关的工具。例如,当用户选择了一个窗体时,该窗体以及窗体工具栏将显示在屏幕上;当用户选择了ThisDocument 对象时,This

39、Workbook 代码窗口将显示在屏幕上。工程资源管理器为用户提供了以下两种选择和编辑对象的方法:双击要选择的对象。首先单击要选择的对象,然后单击鼠标右键,在弹出的快捷菜单中选择【查看代码】或【查看对象】命令。 【属性】窗口【属性】窗口用来查看和设置对象的属性。例如,用户可以使用【属性】窗口设置和查看用户创建的窗体、Word 模板等对象的属性。在【视图】菜单中单击【属性窗口】命令可显示【属性】窗口。在【属性】窗口中仅仅显示与选择的对象相关的属性。【属性】窗口被划分为左右两部分:与当前对象相关的属性显示在左半部分,对应的属性值显示在右半部分,如图11-9 所示。图11-9 【属性

40、】窗口要选择一个对象,可以直接从【属性】窗口顶端的下拉列表中选取,也可以在工程资源管理器中选取然后返回到【属性】窗口。要改变一个对象的属性,应首先在【属性】窗口的左半部分选择该属性,然后在右半部分单击并编辑该属性值。有些属性值被限定在一个预定义的列表中。在这种情况下,属性值文本框将由一下拉列表框替代。 【监视窗口】当工程中有监视表达式定义时,就会自动出现【监视窗口】,如图11-10 所示。图11-10 【监视窗口】用户可以在【监视窗口】中拖动一个选取的变量,到【立即窗口】中。可以编辑一个值,并且按下Enter 键,向上键,向下键,Tab 键,Shift+Tab 键或用鼠标在屏幕

41、上单击,使编辑生效。如果这个值是无效的,则编辑字段会保持在作用中,并且值会以突出显示,且会出现一个消息框来描述这个错误。可以按下ESC 键来中止更改。如果在进入中断模式时,监视表达式的内容不在范围内,则当前的值并不会显示出来。如果用户要在添加监视表达式定义时,可以在【监视窗口】中单击右键,然后在弹出的快捷菜单中选择【添加监视】命令即可弹出如图11-11 所示的【添加监视】对话框。图11-11 【添加监视】对话框11.2.2 自定义Visual Basic 编辑器 设置编辑器自动功能在Visual Basic 编辑器中,有一些自动功能可以使用户在编程时非常方便快捷。要设置编辑器自

42、动功能,请单击【工具】菜单中的【选项】菜单项,并在弹出的【选项】对话框中选择【编辑器】选项卡,如图11-12 所示。图11-12 【选项】对话框中的【编辑器】选项卡在【代码设置】选项组中,可以进行设置的项目及其意义为:自动语法检测决定Visual Basic 是否在输入一行代码之后自动修正语法。要求变量声明决定在模块中是否需要明显的变量声明。选择这个选项会在任一新模块的标准声明中添加OptionExplicit 语句。自动显示列出成员显示一列表,其包含的信息可以逻辑地完成当前插入点的语句。自动显示快速信息显示所键入函数及其参数的信息。自动显示数据提示显示出指针所在位置的变量值。只能在中断模式下

43、使用。自动缩进定位代码的第一行;所有接下来的代码会在该定位点开始。Tab 宽度设置定位点宽度,范围从1 到32 个空格;默认值是4 个空格。在【窗口设置】选项组中,可以设置的项目及其意义为: 编辑时可拖放文本可以在当前代码中,从【代码】窗口拖放元素到【立即窗口】或【监视窗口】。默认为查看所有模块设置新模块的默认状态,在【代码】窗口中查看过程,单一滚动列表或是一次只看一个过程。这不会改变当前已打开模块的视图方式。过程分隔符可以显示或隐藏【代码】窗口中出现在每个过程尾端的分隔符条。 设置编辑器格式在【选项】对话框中,选择【编辑器格式】选项卡可以指定VisualBasic 代码的外观

44、。如图11-13 所示。图11-13 设置编辑器格式在【代码颜色】列表框中选择要设定的文本样式,然后设置其相应的字体和颜色即可,其效果可以在预览框中查看。 设置通用选项有一些关于窗体的网格、错误捕捉方式、编译方式等选项,可以在【选项】对话框中的【通用】选项卡中设置,如图11-14 所示。图11-14 【选项】对话框中的【通用】选项卡在【窗体网格设置】选项组中,可以确定窗体在编辑时的外观。选中【显示网格】复选框,就确定了要显示网格。并在【宽度】框和【高度】框中确定窗体上网格的宽度(2 到60 点)和高度(2 到60 点)。如果选中【对齐控件到网格】复选框,可以自动将控件的外缘放在

45、网格上。如果选中【项目折叠收起时隐藏窗口】复选框,确定当一工程在工程资源浏览器中折叠后工程、UserForm、对象或模块窗口是否应自动关闭。如果选中【在丢失当前状态前通知】复选框,确定是否会收到一消息,通知在运行的工程中所要求的动作将引起所有模块级变量被重置。如果在Visual Basic 开发环境处理错误,可以设置【错误捕捉】选项,此选项会影响所有在此设置改变后所激活的Visual Basic 实例。 发生错误则中断任何使工程进入中断模式的错误,无论是否有活动的错误处理及无论代码是否在类模块中。 在类模块中中断任何在类模块中,使项目在生成错误的类模块的代码行处,进入中断模式的无法处理错误。

46、遇到未处理的错误时中断如果有一个活动的错误处理,这个错误会被捕捉而不进入中断模式。如果没有活动的错误处理,这个错误会使工程进入中断模式。类模块中的无法处理错误,使工程在使用到对象类中在违反过程的代码行处进入中断模式。用户还可以对【编译方式】进行设置:选中【请求时编译】复选框,确定工程在开始前是否要完全编译,或只编译需要的代码,以便让应用程序尽快开始执行。选中【后台编译】复选框,确定在运行时,是否用空闲时间在后台完成工程的编译。后台编译可以改善运行时的执行速度。这个特性只有在选定【请求时编译】的情形下才能使用。 设定可连接的窗口用户可以选出要连接的窗口。连接发生在当窗口附加到其他

47、可连接的窗口或应用程序窗口的边缘时。当移动一可连接的窗口时,该窗口很快地移向此位置。可以移动一个非可连接的窗口到屏幕上的任何地方,并将它留在那里。要设定可连接的窗口,在【选项】对话框中选中【可连接的】选项卡,如图11-15 所示。图11-15 设定可连接的窗口选择要使它可连接的窗口,并清除不要的那些。11.2.3 设置工程的安全性尽管在大多数情况下,我们允许用户访问自己所创建的模块;但是为了防止他人篡改、运行已创建的模块,就必须对模块进行保护。在本节中,将学习VBA 有哪些安全措施和如何进行安全措施设置以及怎样调整权限等内容。为了保护所创建的VBA 模块,可以采取下面三种方法:调整模块属性,使

48、其中代码不能被读或编辑。为模块设置密码。创建用户和组帐户,在此基础上为模块设置权限(这只适用于Access)。可以在Visual Basic 编辑器中设置工程项目(Project)的保护,其具体步骤如下:(1)打开Visual Basic 编辑器,用鼠标右键单击想要保护的工程项目,用鼠标左键单击【Project 属性】,弹出【Project工程属性】对话框,(2)在对话框中,选择【保护】选项卡,如图11-16 所示。图11-16 【Project工程属性】对话框(3)选中【查看时锁定工程】复选框,这样其他人就不能查看或编辑。(4)在【密码】文本框中键入设置的密码。(5)在【确认密码】文本框中,

49、再次键入密码以确认,然后,单击【确定】按钮。这样密码设置完成。当下一次查看或者编辑工程时,屏幕将显示【Project 密码】对话框并要求输入密码。11.2.4 设置条件编译参数用户可以使用条件编译的方式,来选择性地运行代码块,例如,调试语句会去比较对于相同的程序任务使用不同方法的速度,或是通过不同的语言来本地化一个应用程序。可利用#Const 指令在代码中声明一个条件编译常数。并且可以利用#If.Then.#Else 指令来指示代码块做条件编译。下列示例中是以conDebug 变量为基础来运行调试代码或者产生代码。在声明区声明公用编辑常数。#Const conDebug = 1Sub Sele

50、ctiveExecution()#If conDebug = 1 Then用调试语句运行代码。#Else 运行常规代码。#End IfEnd Sub用户可以在工程属性对话框中设置条件编译参数,如图11-17 所示。图11-17 设置条件编译参数11.3 VBA 编程基础11.3.1 了解Visual Basic 语法本节解释最常见的语法元素。 Activate 方法的语法语法:object.Activate在Activate 方法的语法中,object 是一个所提供信息的占位符,在此例中的代码会返回一个对象。例如,下面的过程会在活动的文档中激活第二个窗口。Sub MakeAct

51、ive()Windows(2).ActivateEnd Sub MsgBox 函数的语法语法:MsgBox(prompt, buttons , title , helpfile,context)在MsgBox 函数的语法中,括号内的参数是此函数的命名参数。方括号所包含的参数是选择性的(在Visual Basic 中不用键入方括号)。在MsgBox 函数中,唯一必须提供的参数(prompt)是做为提示的文本。在代码中可以利用位置或名称来指定函数与方法的参数。若利用位置来指定参数,则必须根据语法中的顺序,利用逗号来分隔每一个参数,例如:MsgBox Your answer is c

52、orrect!,0,Answer Box若以名称来指定参数,则须使用参数名称或跟着冒号与等号(:=),最后再加上参数值。可以任何的顺序来指定命名参数,例如:MsgBox Title:=Answer Box, Prompt:=Your answer is correct!函数以及某些方法的语法会利用圆括号将参数封闭起来。这些函数和方法会返回值,所以必须用圆括号将参数封闭起来,才可以赋值给变量。如果忽略返回值或是没有传递所有的参数,则可以不用圆括号。方法若不返回值,则不用将参数用圆括号封闭起来。上述准则不管是使用命名参数或位置参数都适用。在下面的示例中,MsgBox 函数的返回值是一个号码,它被存

53、储在变量myVar 中,以用来指示选择的按钮。因为需要用到返回值,所以调用时必须使用圆括号。而另一个消息框则是用来显示变量的值。Sub Question()myVar = MsgBox(Prompt:=I enjoy my job., _Title:=Answer Box, Buttons:=4)MsgBox myVarEnd Sub 选项语句的语法语法:Option Compare Binary | Text | Database在Option Compare 语句的语法中,大括号和垂直线指示三项中的强制性选择(在Visual Basic 的语句中不用键入大括号)。例如,下列

54、的语句指出在模块中,字符串的比较是根据文本的排序顺序而不区分大小写。Option Compare Text Dim 语句的语法语法: Dim varname ( subscripts ) As type ,varname(subscripts) As type . . .在Dim 语句的语法中,Dim 是必备的关键字。而唯一必备的元素是varname(变量名)。例如,下列的语句创建三个变量:myVar、nextVar 和thirdVar。它们会自动被声明成Variant 变量。Dim myVar, nextVar, thirdVar下面的示例声明了一个String 型的变量。它

55、包含了数据类型,如此可以节省内存并且可帮助从代码中找出错误。Dim myAnswer As String若在一个语句中声明好几个变量,则必须包含每一个变量的数据类型。变量在声明时若少了数据类型,则会自动地声明为Variant 。Dim x As Integer, y As Integer, z As Integer在下列的语句中,x 与y 都被指定成Variant 数据类型,只有z 被指定成String 数据类型。Dim x, y As Integer,Z As String如果声明一个数组变量,则必须包含圆括号,但下标则是可选的。下列的语句中定义了一个动态数组myArray。Dim myAr

56、ray()11.3.2 有效地利用数据语法表11-1 列出VBA 所支持的数据类型,以及存储空间的大小与范围。表11 11-1 数据类型数据类型存储空间大小范围Byte 1 个字节0255Boolean 2 个字节True 或FalseInteger 2 个字节-32,76832,767Long(长整型)4 个字节-2,147,483,648 2,147,483,647Single (单精度浮点型)4 个字节负数时-3.E38-1.E-45;正数时1.E-45 3.E38Double (双精度浮点型)8 个字节负数时1.232E308-4.247E-324;正数时4.247E-3241.232

57、E308Currency( 变比整型)8 个字节-922,337,203,685,477.5808922,337,203,685, 477.5807Decimal 14 个字节没有小数点时为79,228,162,514,264,337,593,543,950, 335,而小数点右边有28 位数时为7.;最小的非零值为0.Date 8 个字节100 年1 月1 日 9999 年12 月31 日Object 4 个字节任何Object 引用String (变长)0 字节加字符串长度1 0 大约20 亿String(定长)字符串长度1 大约65,400Variant(数字)16 个字节任何数字值,最大可达Double 的范围Variant(字符)22 个字节加字符串长度与变长String 有相同的范围用户自定义( 利用Type)所有元素所需数目每个元素的范围与它本身的数据类型的范围相同注意:任何数据类型的数组都需要20 个字节的内存空间,加上每一数组维数占4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以4 个2 字节的Integer 数据元所组成的一维数组中的数据,占8个字节。这8 个字节加上额外的24 个字节,使得这个数组所

温馨提示

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

评论

0/150

提交评论