Office编程技术——理解对象模型 对象是Microsoft Office 97应用程序的基本构成组块;几乎你在Visual Basic中所作的每一件事情都包括了对对象的操作。在Office中,每个内 容和功能单元,——每个工作簿(Workbook),工作表(worksheet), 文档(Document),文本范围,幻灯等等——它们都是对象,你可以在 Visual Basic中进行可编程地控制。当你理解了对象是如何工作之后, 你就会准备在Office中进行自动的工作了。 对象模型概览 在你通过编程对应用程序中的内容和功能进行访问之前,很重要的一点就 是需要了解应用程序中的内容和功能是如何被分割成分离的对象的,以及 这些对象是如何被组织安排在一个继承的模型里的。 什么是对象和对象模型 一个应用程序包含两件事情:内容和功能。内容依赖于应用程序所包含的 文档,以及包括在文档中的字词,数字,或是图形;它还依赖于有关应用 程序中的独立要素的属性信息,例如说窗口的大小,图形的颜色,或是一 个字词的字体大小等等。功能依赖于你使用应用程序中的内容来进行工作 的所有方法——例如,打开,关闭,添加,删除,拷贝,粘贴,编辑,或 是格式化应用程序中的要素。 应用程序中的内容和功能被分割为有关联的内容和功能的不连续的单元, 叫做对象(Object) 。你已经对一些这样的对象非常熟悉了,例如说一 些用户界面的要素:Microsoft Excel工作簿,工作表,以及表格表元范 围; Word 的文档和小节;以及 PowerPoint 的介绍和幻灯片等等。 在一个应用程序中,最高级别的对象通常是 Application 对象,它就是应 用程序本身。例如,在 Microsoft Excel 对象模型中的 Application 对象就 是 Microsoft Excel 本身。在 Application 对象中包含了一些其它的对象, 这些对象只有在 Application 对象存在的时候(也就是说,当应用程序运行 的时候)你才可以访问到它们。例如, Microsoft Excel 的 Application 对 象包含了 Workbook对象,而 Word 的 Application 对象中则包含了Document 对象。因为此 Document 对象的存在依赖于 Word 的 Application 对象的存 在,所以此 Document对象被称之为 Application 对象的子对象( child), 反过来,此Application 对象被称之为 Document对象的父对象( parent)。 许多子对象又有它们自己的子对象。例如,在Microsoft Excel 里,Workbook 对象包含了 Worksheet 对象,或者说,它是 Worksheet 对象的父对象, Worksheet对象表示在 Workbook对象中的所有的工作单。一个父对象可以拥有 多个子对象;例如, Word 的 Windows 对象拥有 Panes , Selection,以及 Object 等子对象。同样,一个子对象也可以拥有多个父对象;例如, Word的 Windows 集合对象同时是 Application 对象和 Document对象两者的子对象。 对象组成应用程序的方法彼此之间按照它们被分开的内容的功能又 相互联系起来,这叫做对象的分层结构(Object hierarchy)或是 对象的模型(Object model)。 注意:如果你在安装Microsoft Office的过程中单击了“典型安装(Typical) ”,你将需要重新安装以将你所想要的了解的应用程序的 Visual Basic for Application相应的帮助安装进去。 另外为包含低级别的对象,在对象分层结构中的每个对象,它所包含的内容 和功能都能够提供给该对象本身,以及在对象分层结构中处于该对象之下的 那些对象。在对象分层结构中的级别越高,则它的内容和功能的覆盖范围也 就宽。例如,在 Microsoft Excel 中, Application 对象中包含了应用程序 窗口的大小已经退出此应用程序的功能; Workbook 对象中包含了文件名称 和工作簿的格式,以及存储此工作簿的功能;在而 Worksheet 对象中则包含 了工作表的名称以及删除此工作表的功能。 你通常并不能接触到你对文件的内容(例如在 Microsoft Excel工作表中的数 值,或是在一个 Word 文档中的文本)所想的事情,除非你已经在对象的分层 结构中相当多的级别里进行了移动,这是因为这些特殊的信息从属于应用程 序中非常特殊的部分。换句话说,在一个工作表中的表元里面的值仅仅值提 供给那个表元,而不是工作表里的所有的表元,所以你不能在 Worksheet 对 象中直接存储它。存储在一个对象中的内容和功能同该对象的范围都有这样 本质的联系。 总的说来,一个应用程序中的内容和功能被围绕着该应用程序的对象模型中 的对象进行了分割。在对象分层结构中的对象联合起来又包含了应用程序中 的所有内容和功能。对象们分别提供了对这些内容和功能中非常特殊的区域 的访问。 什么是属性和方法? 要接触包含在一个对象中的内容和功能,你需要使用此对象的属性和方法。 下面的Microsoft Excel 例子使用了在 Range对象中的 Value属性来设置一个 名称为“ Current.xls ”的工作簿中的“ Sales ”工作表的 B3 表元的值。 Workbook s("Current.xls").Worksheets("Sales").Range("B3").Value = 3 在下面的例子里使用了 Font 对象中的 Bold 属性来将“ Sales”工作表中的 B3表元设置为加粗格式。 Workbook s("Current.xls").Worksheets("Sales").Range("B3").Font.Bold = True 在下面的 Word 例子里使用了 Document 对象中的 Close 方法来关闭名称为 “Draft 3.doc”的文件。 Documents("Draft 3.doc").Close 通常,你使用属性来接触内容,这些内容可以包括包含在一个对象中的文本, 或是针对此对象的属性设置;而你可以使用方法来接触功能,这些功能使你可 以对内容做你所希望的每一件事情。然而,需要小心,在属性和方法之间的区 别并不总是这样,在每个对象模型中都有相当数量的属性和方法,它们都违反 了这个规则。 对象模型是如何同用户的界面相联系的? 一个应用程序对象之间的相互影响有两种方法可以实现:人工的(使用用户 接口)或是程序自动进行的(使用编程语言)。在用户接口中,你可以使用 键盘或是鼠标,或是两者全上,来浏览应用程序中能够控制你所要改变的数 据或是使用希望使用的命令的那一部分。例如,在 Microsoft Excel中,在一 个名为“Current.xls ”的工作簿中的一个名为“Sales ”的工作表中的B3表 元里输入一个数值,你单击tab来到达Sales工作表上,你在单击进入表元B3, 然后你可以输入一个数值。 用 Visual Basic 的语言来说,你在对象的分层结构中从最高级别的对象移动 到那个包含了你希望用来工作的内容和功能的对象上,并且你使用了那个对 象的属性和方法来接触到此内容和功能。例如,下面的 Microsoft Excel 例 子移动到了一个名为“Current.xls ”的工作簿中的一个名为“ Sales”的工 作表中的B3表元,并设置此表元的内容。 Workbooks("Current.xls").Worksheets("Sales").Range("B3").Value = 3 因为用户接口和 Visual Basic 是两种能够用来访问完全相同的内 容和功能的方法,许多对象,属性,以及方法,都共享在用户接 口中的要素的名称,并且所有的对象模型的结构都同用户接口中 的结构相类似。这还意味着对于你通过用户接口所进行的每个行 为,都有等效的Visual Basic代码存在。 为什么知道一个对象在对象模型中的位置是麻烦的? 理解一个对象在对象模型中的位置是非常重要的,因为在你能够使用一个对 象进行工作之前,你不得不在对象模型中移动以达到它。这通常意味着你不 得不在对象分层结构中从该对象上面的所有对象开始,一步一步地接近并到 达它。例如,在Microsoft Excel中,你不能直接就进入到一个工作表的特定 表元中去,而不需要首先进入包括了此工作表以及表元的应用程序。下面的 例子里在一个叫做“Annual Sales.xls”的工作簿中的“Second Quarter” 工作表的B3表元中插入数值3。 Application.Workbooks("Annual Sales.xls").WorkSheets("Second Quarter"). Range("B3").Value = 3 同样,在下面的Word例子里为在首先被打开的文档的第三自然段中的第二个字 设置为加粗格式。 Application . Document s(1).Paragraphs(3).Range.Words(2).Bold = True 什么是集合对象 当你使用Visual Basic的图形帮助来研究你希望进行编程的应用程序的对象模 型时,你可能会注意到在图形中有许多的方框,其中包含了两个字——通常是 同一个对象名称的单数形式和复数形式,例如“Documents (Document)”或是 “Workbooks (Workbook)”。在这些情况下,第一个名称(通常是复数形式) 表示它是一个集合对象( collection object)的名称。一个集合对象是一个 包 含了一系列相关对象的对象。你可以使用这些处于一个集合内的所有对象进行 工 作,把它们当作一个单一的组来使用,而不是分别使用它们。第二个名称(通 常是单数形式),被一个括号所包围着,它是在集合中的单个对象的名称。例 如,在Word 中,你可以使用Documents集合来工作,将所有在该集合对象中的 Document对象作为一个整体来使用。 尽管Documents 集合对象和Document对象从它们的根本来说都是对象,它们分 别都有它们自己的属性和方法,但是在大多数的对象模型图形中通常都把它们 组合为一个整体以减少复杂性。你可以使用一个集合对象来接触在该集合对象 中的个别对象,通常使用的是Item属性或方法。在下面的PowerPoint例子中使 用了 Presentations 集合对象中的 Item 属性以使名为“ Trade Show”的简 报处于活动状态,然后再关闭它。所有其它打开的简报被留下打开。 Presentations.Item("Trade Show").Close 注意 :对于大多数的集合对象来说, Item 属性或方法是缺省的方法。因此 Presentations( " Trade Show " ).Close 同上面的语句是等效的。 你还可以建立一个新的对象并把它添加到一个集合对象中,这通常需要使用该 集 合对象的 Add 方法。下面的 Word 例子创建了一个基于 Normal模板的文档。 Documents.Add 通过使用 Count属性,你可以知道在一个集合对象中到底有多少的对象。下面 的Microsoft Excel例子使得如果有超过3个的工作簿被打开的话,将在一个信 息对话框中显示出打开的工作簿的数目。 If Workbooks.Count > 3 Then MsgBox "More than 3 Workbooks are open" 集合同其它的方法一样都是非常有用的。例如,你可以对一个给定的集合中的所有 对 象进行操作,或是你能够设置或是测试在该集合中的所有对象。要做到这些,你可 以 使用一个 For Each...Next 或 For...Next 结构来循环历遍集合中的所有的对象。 使用对象使工作自动化 在Microsoft Office中,要想是工作能够自动进行,你首先需要返回一个包含 了你希望进行的内容和功能的对象的引用(reference),然后你位该对象提供 属性和方法。返回一个对象的引用 在你使用对象做任何事情之前,你需要返回指向该对象的一个引用。要做到这些, 你必须构造一个表达式一获得对处于对象模型中的一个对象的访问,然后在使用 属性和方法在对象的分层结构中上下移动直到你到达你所要用来工作的那个对象 为止。这些你用来返回你的起始的对象以及从一个对象移动到另一个对象的属性 和方法被称作对象存取器(object accessors),或者只称作存取器。一旦你使 用存取器构造了一个表达式来返回一个对象的引用,你需要把下面的指导牢记在 心。 o 一个获得对对象模型访问的通常的地方是此对象的最顶端,它通常就是 Application对象。使用Application属性以返回指向Application 对象的引用。下面的表达式返回了指向Application对象的一个引用 (适用于任何包含了一个Application对象的对象库) Application o 要想从分层结构的最顶端的对象向下到达一个对象,你必须一步一步地通 过所有在分层结构中位于其上的对象,使用存取器从一个对象返回另一个 对象。例如,Word的Application对象的Document属性返回Documents 集合对象,它代表了所有的打开的文档。下面的表达式返回了一个指向 Word的Documents集合对象的引用。 Application.Documents o 你可以使用快捷的存取器以获得对在模型中的对象的直接访问,而不需 要从Application对象一直往下移动。这些快捷包括了存取器——例如 Documents,Workbooks,以及Presentations属性——你可以使用它们 本身来返回一个指向特定应用程序的文档集合的引用。例如,在Word 里,你可以使用下面的两种语句来打开MyDoc.doc。 Application.Documents.Open FileName:="C:\DOCS\MYDOC.DOC" Documents.Open FileName:="C:\DOCS\MYDOC.DOC" 还有一些其它的快捷存取器 —— 例如说 ActiveWindow , ActiveDocument,ActiveWorksheet,或是ActiveCell属性—— 它们可以返回指向一个应用程序活动部分的直接引用。下面 的语句关闭活动的Word文档。注意 Application对象和Documents 集合对象没有出现。 ActiveDocuments.Close 提示 当在Classes窗格中作为一个快捷被选中时, 你可以使用任何出现在对象浏览器的 Member of 窗格中的存 取器;这就是说,你不需要在使用属性和方法之前返回应用 此属性和方法的对象,这是因为 Visual Basic能够从你运行 的代码的上下文中检测出全局的属性或方法被应用于哪个对 象。 o 要想返回一个集合中的单个成员,你通常可以使用此成员的名称或索引 号码通过Item属性或方法来完成。例如,在Microsoft Excel中,下面的 表达式返回一个指向一个打开的名为“Sales”的工作簿的引用。 Workbooks.Item("Sales") Item 属性或方法对于大多数集合来说是缺省的方法。所以下 面的两个表达式是等效的。 Workbooks.Item("Sales") Workbooks.("Sales") o 要想在分层结构中从一个对象往高处浏览,你通常可以使用该对象的 Parent属性。注意该Parent属性并不总是返回一个对象的最直接父对 象——它可能会返回该对象的“祖父”,特别是当此对象是一个集合对 象的成员之时。这就是说,一个处于集合中的对象的Parent属性可能 会返回此集合对象的父对象,而不是该对象的父对象。例如,一个Word 的Document对象的Parent属性返回Application对象,而不是 Documents集合对象。可以使用TypeName函数来找出一个对象的 Parent属性所返回的引用是什么对象的引用。例如,在Microsoft Excel 中,下面的语句显示了对象的类型,该对象由Worksheet对象的Parent 属性所提供。 MsgBox TypeName(Workbooks(1).Worksheets(1).Parent) 提示 你可以使用 Typename函数来确定通过任何表达式所返 回的对象的类型,而不仅仅只是包含 Parent 属性的表达式 所返回的对象类型。 ActivePresentation.Slides(1).Shapes(3). Object.Application 在对象上应用属性和方法 在你已经返回了指向你希望用来工作的对象的参考之后,你可以在此对象上应 用属性和方法来为之设置一个属性或是在其上执行一个动作。在返回指向对象 的引用的表达式中包含有属性或方法以及应用它们的对象。你需要使用“点 (dot)”操作符(.)来将它们分开。下面的例子,可以在 Microsoft Excel, Word,或是 PowerPoint中运行,它通过使用Window 对象的Left属性来设置活 动窗口的左边的位置, ActiveWindow 属性返回了一个指向该 Window 对象的 引用。 ActiveWindow.left = 200 下面的 Word 例子通过使用 Document 对象的 Close 方法关闭活动的文档, ActiveDocument属性返回了一个指向该对象的引用。 ActiveDocument.Close 属性和方法可以带有限制它们如何操作的参数。在下面的 Word 例子里, Document 对象( ActiveDocument 属性返回了一个指向该对象的引用)的 PrintOut 方法带有相应参数,该参数指定了它应该打印的页码范围。 ActiveDocument.PrintOut Form:="3", To:="7" 你可能不得不在对象模型中的几个页面( layers )移动,以获得你认为是在 应用程序中的真正的数据,例如说在 Microsoft Excel工作表的表元中的值, 或是在一个Word 文档中的文本。下面的 Word例子使用了如下的属性和方法来 从对象模型的顶端移动到文档的文本中: o Application属性返回一个指向Application对象的引用。 o Application对象的Documents属性返回一个指向Documents集合 的引用。 o Documents集合的Item方法返回一个指向单个Document对象的引用。 o Document对象的Words属性返回一个指向Words集合的引用。 o Words集合的Item方法返回一个指向单个Range对象的引用。 o Range对象的Text属性设置此文档第一个字的文本。 Application.Documents.Item(1).Words.Item(1). Text = "The " 因为此 Documents属性是一个全局的属性,它可以被使用而没有 Application 的限制,并且因为 Item 对于集合对象来说是缺省的属性和方 法,所以你不需要在你的代码中明确地指出它们。你可以因此缩短你的进程 的语句,该语句显示在下面的例子里。这个例子隐含地从上至下进行移动, 和前面所详细解释的例子一样历遍了同样多的级别。 Documents(1).Words(1).Text = "The " 同样,下面的Microsoft Excel 例子从上至下到达 Range对象,该对象表示在 一个名为“ Sales.xls”的工作簿中叫做“ New ”的工作表里面的 B3表元。 Workbooks(" Sales.xls ").Worksheets( "New ").Range( "B3 ").Value = 7 获得书写代码的帮助 有时候你可以猜到你需要为之返回引用的对象是什么对象,如何构造一个表 达式来返回它,以及你需要在其上应用什么属性或方法以完成一项工作。例 如,如果你希望关闭一个活动的 Word 文档,你可能会猜测到该关闭文档的功 能是由 Close 方法所控制的,该方法应用在 Document 对象上,而该对象由 ActiveDocument 属性来返回——你是对的。然而,在大多数的时候,要想 描绘出你希望使用的对象,属性以及方法并不是那么简单。幸运的是, Office应用程序包括了许多的工具,这些工具可以帮助你书写代码来进 行你的工作。 使用宏记录器 如果你不知道你需要使用哪些属性和方法来完成你的工作,但是你知道如何使 用用户界面接口来温差这项工作(或是某些同该工作非常类似的行为),你可 以使用宏记录器来将对用户界面接口的一系列动作翻译为一系列的Visual Basic 的程序指令。例如,如果你不知道使用哪些属性和方法来缩进Word文档的一个 段落,你可以记录你缩进一个段落的动作。 要在Microsoft Excel,Word,或是PowerPoint中记录用户界面的动作,你需 要按照以下步骤进行: 1. 打开工具(Tools )菜单,指向宏( Macro)命令项,然 后单击录制(Record New Macro)。 2. 如果你需要的话,你可以改变缺省的宏的名称和位置。然 后单击确定(OK)以启动宏记录器。 3. 在用户界面中,进行你希望的工作,直到完成。 4. 当你完成了你的工作,在停止记录( Stop Recording ) 工具条上单击停止记录( Stop Recording )按钮。 5. 在工具(Tools )菜单中,指向宏( Macro)命令项,然 后单击宏(Macros)。 6. 选择步骤2 中建立的宏的名称,然后单击编辑(Edit)。 你可以检测此Visual Basic代码,然后试着对你通过在用户界面中特定行为所 建立的属性和方法进行修正。 尽管此代码可以给你一个好的主意,以了解更多的有关这些属性和方法的信息 ,但是你可能并不希望直接使用这些代码而不经过任何的编辑修改。这是因为 这些由宏记录器产生的代码通常并不是十分有效或是强壮。例如,记录代码通 常从一个对象中启动,该对象在你开始记录以及在对象模型中从该对象移动到 其它部分时被选择或是激活,如下面的Word例子所示。 Selection.ParagraphFormat.LeftIndent = InchesToPoints(0.5) 下面是另一个在PowerPoint中基于选择的代码的例子: ActiveWindow.Selection.ShapeRange.Delete 在上面所描述的代码中就存在着问题,除了它们的效率不高以外,当你运行这 些代码以使它正常工作时,还要依赖于被选择或激活的特定的要素组件。如果 你的代码中包含了在对象模型中进行移动的表达式,而并不是从一个被选择或 激活的对象开始的话,你的代码就会更加的强壮和灵活。例如,在Word中,如 果你不是在由 Selection 属性所返回的 Selection 对象中应用 Paragraph Format属性,而是在 Paragraph 对象上应用 Format属性,该 Paragraph对象 可以代表一个指定的段落(如下面的例子所示),则你的代码将能够正确无误 地运行,而不管你运行它时有什么东西被选择了。 Documents("Test Document.doc").Paragraphs(1).Format.LeftIndent = InchesToPoints(0.5) 要想知道如何改善你所记录的代码,你可以在你的代码中将光标插 入到一个属性或是方法之中,然后按下F1键查看有关该属性和方法 的帮助以及样例代码。 帮助文件以及图形 对于任何给定的Office应用程序,Visual Basic帮助包含了在对象 模型中的每个对象,属性,方法以及事件的相关主题。 如何显示对应于 Microsoft Excel , Word ,以及 PowerPoint的 Visual Basic帮助信息? 要想使用对应于 Microsoft Excel , Word ,以及 PowerPoint的 Visual Basic 帮助信息,你必须在安装过程中单击自定义 (Custom )按钮,然后选择针对该应用程序的 Visual Basic在线 帮助( Online Help for Visual Basic )检查框。否则,Visual Basic 的帮助将不会被安装进去。如果你已经安装了你的应用程 序, 你可以再次运行安装程序来安装 Visual Basic 的帮助文件。 要想看到对应于Microsoft Excel,Word,以及PowerPoint的Visual Basic帮助 的内容和索引,请在Visual Basic编辑器的帮助(Help)菜单上单击内容和索 引( Contents and Index )命令项。在帮助主题( Help Topics)对话框中 的内容(Contents)卡片中,双击包含了你正在用来工作的应用程序名称的书 名(例如,“ Microsoft Word Visual Basic Reference”),然后双击该书 的快捷(例如,“ Shortcut to Microsoft Word Visual Basic Reference”)。 此帮助主题对话框将会重新出现,显示出对应你的应用程序的Visual Basic帮 助的内容和索引。 如果你看到一个对象的名称,而不能说出该对象所包含的内容和功能,你可以 在图形中单击该对象以打开它的帮助主题来学习有关它的更多的知识。对于单 个的对象,帮助主题包含了如下的信息: o 主题的顶部的一个图形。该图形显示了在对象模型中位于该对象的上面 或下面的重要的对象。你可以在图形中单击任何对象一查看有关它的更多 的信息。 o 一个对该对象中所包含的内容和功能的解释。 o 指令和例子。它们解释了如何在一个对象模型中移动以到达另一个对 象, 以及如何在该对象上应用属性和方法。注意,你可以从帮助主题中拷贝 代码,并把它们应用到你自己的代码中去。 o 在主题顶部的跳转。它显示了应用于该对象的属性和方法的清单。你可 以单击这些属性或方法的名称以打开它们的帮助主题。 对于单个属性或方法的帮助主题,它包含了两方面的内容,一个是对该属性或 方法允许你所访问的内容或功能的描述,另一个则是允许你进入到使用此属性和 方法的例子的跳转。你可以将代码从帮助主题中拷贝到剪贴板中,然后将它们粘 贴到你自己的模块中去。 对象浏览器 每个Office应用程序都提供了一个文件,叫做对象库(object library),或 是类型库(type library),它包含了有关对象,属性,方法,事件,以及内 建入该应用程序的常量的信息。你可以使用一个叫做对象浏览器( Object Browser )的工具来在此文件中查看信息,以及浏览它所描述的对象。 要想从Visual Basic的编辑器(Microsoft Excel ,Word,以及PowerPoint) 或是从一个模块icrosoft Access)中打开对象浏览器,单击位于查看(View) 菜单中的对象浏览器( Object Brower )命令项。在项目 / 库 ( Project/Library)框中,单击你希望查看的对象的对象库的名称,或是单 击<所有库 >( )以查看在所有被参考的对象库中的所有对象 的一个主要清单。如果你希望查看的对象的对象库没有出现在项目 / 库 (Project/Library )框中的话,你必须建立一个指向该对象库的引用,这可 以通过使用引用( References )对话框(在工具菜单中)来实现。 在对象浏览器中的类( Classes)框中显示了在所有被引用的对象库中的所有 对象的名称以及枚举的类型。 注意 一个类(class)是一个对象的类型(type),或是描述。一个对象是一 个类的实际上的实例。例如,Workbook类包含了你需要用来创建一个工作簿的 所有的信息。一个Workbook 对象则仅仅在当你在使用 Workbook类中的信息来 创建一个真正的工作簿(一个Workbook类的实例)时才存在。尽管存在着这些 技术上的区别,但是这些术语通常还是被不加区别的混合使用。在这一章中术 语“对象”,通常被作为“类”和“对象”两者来使用。 当你在对象浏览器中单击出现在类框中的对象名称时,你可以看到同处于成员 ( Members of )框中的对象相关联的所有的属性,方法,以及事件。 提示 一个事件就是一个可以被对象识别的行为,例如单击鼠标或是按下一个 按键。你可以为这些行为书写相联系的代码。 在成员(Member of )框中单击一个属性或是方法。你可以按下F1 键来查看针对所选择的关键字的帮助主题,或是你可以在位于对象 浏览器窗口底部的细节( Details)窗格中看到如下的内容:句法 信息,一个属性的只读或是读 /写状态,该对象所属的对象库,以 及数据类型,或是该属性或方法所返回的对象等等。如果在细节窗 格中的一个字是一个跳转的话,则你可以单击它来获得更多的信 息。 如果你希望确定如何移动到一个对象上,则此特性是非常有用的。 例如,在Word 中,如果你单击了在类框中的Application对象,然 后单击了位于成员框中的 ActiveDocument 属性,你将会在细节窗 格中看到下面的语句: property ActiveDocument As Document 这告诉你ActiveDocument 属性返回了一个指向 Document对象的参考。如果你 单击此返回的类型(在关键字As之后的对象类型或数据类),在这个例子里是 Document ,则对象浏览器将会显示出 Document 对象的属性和方法。 如果你忘记了确切的句法棗属性或句法所用的参数的名称以及顺序,以及需要 使用或选择哪些参数,则细节窗格也是非常有用的。例如,在Word中,如果你 单击了你刚刚移动到的 Document 对象中的 ComputeStatistics方法,,你将 会在细节窗格中看到下面的语句: Function ComputeStatistics(Statistic As WdStatistic , [IncludeFootnotesAndEndnotes]) As Long 这告诉你你可以所 Document 对象上应用 ComputeStatistics方法,并且得知 该方法所返回的值的类型是Long,但是你不得不在此方法工作所使用的参数的 形式中提供一些额外的信息。因为参数 Statistic没有位于方括号中,这表明 它 需要一个参数棗这就是说,你必须为之提供一个值才能使该方法正常工作。 IncludeFootnotesAndEndnotes 位于方括号之中,这表明它是一个可选的参 数。如果你不为之提供一个值,则 Visual Basic 将使用缺省的值。 如果你已经对 ComputeStatistics 方法非常地熟悉,在细节( Details )窗 格中的信息可能会对你的内存进行足够的提醒( jog),你可以在代码中使用 此方法,例如如下的例子。 MsgBox ActiveDocument.ComputeStatistics(Statistic:=wdStatisticWords, _ IncludeFootnotesAndEndnotes:=True) & " words" 你可以从细节( Details )窗格中将文本拷贝出来,然后或是采用粘贴的方 法, 或是仅仅只是拖动将它拉到你自己的模块中。如果你不能记住 Statistic参数 的可能的值,单击 WdStatistic可以看到有效常量的清单。如果你仍然没有足 够的信息以在代码中使用 ComputeStatistics 方法,你可以单击 F1键来获取 帮助。 注意如果你有一个指向包含了相同名称的对象的对象库的引用,并且你在对象 浏览器中的项目/库框中选择了 <所有的库 >( ),你将会在对 象浏览器中看到复本名称。例如,如果你有一个指向Microsoft Excel 和Word 对象库的引用,你将会看到 AddIn 对象的复本, AddIns 对象的复本, Adjustments 对象的复本, Application对象的复本,等等。你可以通过分别 单击它们之一以告诉这些复本对象,并且在细节窗格中看到信息。在细节窗格 中告诉你所选择关键字是哪一个对象库的成员。 语句构造工具 有许多工具被内置在开发环境中,它们可以帮助你在Visual Basic中构造表达 式和语句。要想在Visual Basic 的编辑器( Microsoft Excel, Word,或是 PowerPoint)中打开或关闭这些工具,首先在工具菜单中选择选项命令项,打 开选项对话框,然后在编辑器( Editor )卡片上的代码设置( Code Settings)下面选择一个或多个如下所列的检查框。在Microsoft Access中, 可以首先在工具菜单中选择选项命令项,打开选项对话框,然后在模块 ( Module )卡片上的代码选项( Coding Option)下面选择一个或多个下面 所列的检查框。 选项 效果 Auto Syntax Check 确定Visual Basic是否在你输入了一行 代码之后自动进行正确的语法校验。 Require Variable Declaration 确定在模块中是否需要外部的变量声明。 如果选中此检查框,则在任何新的模块中将把Option Explicit语句添加到 通常的声明中。 Auto List Member显示出一个列表,它包含能够逻辑性地完成在当前插入点 位置的语句的信息。 Auto Quick Info 在你键入函数和它们的参数时显示有关它 们的信息。 Auto Data Tips 显示出指针所在的位置的变量的值,本功 能只在中断(break)模式中可用。 Auto Indent 在当你按下回车键时重复正在进行的行的缩进。这就是说, 所有的后面的行将从此缩进位置开始显示。你可以通过按下回删键 (BACKSPACE)来删除自动缩进的部分。 Tab Width 设置制表符的宽度,其范围是从1到32 个空格的宽度(缺省是4个空格的宽度)。 这些工具在你构造表达式和语句的每一个阶段中都显示出信息给你适当的选 项以供选择。例如,当选中了自动列出成员( Auto List Member )选项, 键入关键字 Application 后面跟随这点操作符。你可以看到一个框中列出了 在第一个你引用的对象库中的在 Application 对象上可应用的属性和方法。 (如果你有几个对象库被引用的话,你可能希望使用此对象库名称对你的语 句加以限制,以确保你返回了一个指向正确的对象的引用。例如,你可能会 希望使用 Excel.Application 或者 Word.Application 来代替仅仅一个字 Application )。你可以从列表中选择一个,然后继续进行键入的操作。 通过在模块里的快捷菜单中单击列出属性 / 方法( List Properties/ Methods ),列出常量( List Constants ),快速信息( Quick Info ), 参数信息( Parameter Info ),或是完成字( Complete Word ),你可 以在任何时间获得构造表达式的帮助信息。要了解有关在 Microsoft Excel, Word ,以及PowerPoint 中的这些命令的更多的信息,可以在Visual Basic的帮助中查找相应的命令名称。 事前连结以及语句构造工具 当你在一个应用程序中建立了一个对象变量,它引用了由另一个应用程序所 提供的对象时, Visual Basic 必须校验该对象的存在,以及该对象所使用的 任何属性和方法被正确进行了说明。这个校验的过程就是我们所知道的 连结 (binding )。连结可以在运行时刻发生(事后连结),也可以在编译时刻发 生(事前连结)。事后连结的代码较事前连结的代码运行要慢。另外,许多 内置于开发环境的代码诊断都只能在事前连结代码中工作。 要使你的代码事前连结 1. 设置一个类型库的引用,该类型库包含了你要引用的对 象;可以在工具( Tools )菜单中的引用( Reference)对 话框中做到这些。 2. 将你的对象变量作为一个特定的类型进行声明。例如, 如果一个对象变量将要包含一个 Document 对象的引用,对 该变量的声明应如下所示: Dim wdObject As Document 不要将此变量作为一个通常的对象类型来声明,例如如下所 示的声明是不正确的。 Dim wdObject As Object 3. 如果你书写的代码从超过一个的空中使用对象,当对对象 变量进行声明时需要指定应用程序的名称,特别是如果在不 同的库中包含了相同名称的对象的时候,如下面的两个声明 所示。 Dim wndXL As Excel.Window Dim wndWD As Word.Window 如果一个在你的代码中所使用的属性或方法返回了一个对象的引用,它指向一 个一般的Object返回类型而不是特定的对象类型,则你必须使用一些额外的步 骤来确保你的代码是事前连结的,这样语句构造工具将能够工作。 例如,在Microsoft Excel中,Worksheets 对象的Item方法返回Object类型, 而不是 Worksheet类型,所以当你在你的语句中到达了下面的位置时,你不能 从语句构造工具中获得任何更多的帮助。 Workbooks(1).Worksheets(1). 因为所返回的对象类型是Object,它对于所有的对象来说是个一般的类型,则 语句构造工具不能知道可以使用的什么样的属性和方法。要想使工具正常工作 ,你必须为外部声明一个对象变量,它具有特定的类型 Worksheet,并且你必 须将此对象变量设置到返回指向 Worksheet对象的表达式中,如下面的例子所 示。 Dim testWS As Worksheet Set testWs = Workbooks(1).Worksheets(1) 从这一点开始,当你键入对象的名称,以及后面所跟随的点操作符时,此列出 属性 / 方法( List Properties/Methods )命令将会针对该变量所引用的 Workbook对象提供器属性和方法的建议。 对另一个应用程序的对象进行编程 你可以在一个Microsoft Office应用程序中运行同位于其它的应用程序中的对 象一起工作的代码, 要想其它的应用程序的对象进行编程 1. 在引用(References)对话框中(工具菜单中)设置指向 其它应用程序的类型库的引用。在你完成了这些之后,对象, 属性,以及方法将会显示在对象浏览器中,并且在编译时间 将会对句法进行检查。你还可以获取它们的相关帮助。 2. 将引用位于其它应用程序中的对象的对象变量作为一个特 定的类型来声明。确保使用在应用程序中陈列的对象的名称来 对每个类型加以限制。下面的例子里声明了一个变量,该变量 指向一个Word文档,另一个变量引用了一个Microsoft Excel的 工作簿。 Dim appWD As Word.Application, wbXL As Excel.Workbook 3. 使用你希望在其它的应用程序中工作的对象的带有 OLE标 识符的 CreateObject函数,如下面的例子所示。如果你希望看 到其它的应用程序的会话,将 Visible 属性设置位 True 。 Dim appWD As Word.Application Set appWD = CreateObject("Word.Application.8") appWd.Visible = True 4. 在包含在变量中的对象上应用属性和方法。下面的例子建 立了一个新的Word文档。 Dim appWD As Word.Application Set appWD = CreateObject("Word.Application.8") appWD.Documents.Add 5. 当你完成了针对其它应用程序的工作,使用Quit方法来关 闭它,如下面的例子所示。 appWd.Quit (全文完) 微软公司供稿