下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用V精选操作Word用VBA操作Word(转)在所有Office应用程序中,Microsoft Word可能是应用最广泛的应用程 序,它还经常在自定义Office解决方案中扮演重要的角色。开发人员用各种不 同的方式使用Word,有一些方式很简单,而另一些极其复杂。无论涉及何种H 定义解决方案,用Visual Basic for Applications (VBA)处理Word文档的 基本方法都是一样的。在本栏目中,我将概括地介绍如何使用Word,并提供一 些关于如何运用Range对象处理Word文档内容的详细资料。理解基本方法在Word中,儿乎所有的操作都要调用Document对象本身或其内容
2、。当您 用VBA操作Word时,Document对象表不一个打开的文档,而且所有的Document对象都是Application对象的Documents集合的成员。文档是一个由字符、单词.句子和段落组成的集合,字符组成单词,单词组 成句子,句子组成段落,等等。因此,每一个Document对象都具有Characters Words % Sentences 和 Paragraghs 四个集合。此外,每个文档具 有一个包含一个或多个节的Sections集合,每一个节都有一个包含该节页眉和 页脚的HeadersFooterS集合。注意:您可以在Microsoft Office 2000开发人员对象模型
3、指南(英文) 中查阅完整的Word对象模型。另外,您也可以使用对象浏览器和MicrosoftWord Visual Basic参考帮助來学习有关具体某个对象、属性.方法和事件的详 细内容。通过VBA使用Word时,Document对象处于中心位置。如果您要打开文档 或创建新文档,就要创建新的Document对象。每个打开或新创建的文档均被添 加至Documents集合。具有焦点的文档称为活动文档,由ActiveDocument属 性表示。Document对象作为Documents集合中的一个成员,您可以通过使用Document对象的索引值(Document对象在Documents集合中的位置,
4、1是集 合中的第一个文档)或名称來引用它。另外,您也可以使用ActiveDocument属 性來引用当前具有焦点的文档。例如,如果名为的文档是唯一打开的文档,则以下三个对象变量将全部指向:DimdocOne AsDimdocTwo AsDimdocThreeAsSetdocOne =Documents (1)SetdocTwo =Documents ("")SetdocThree= ActiveDocument一般情况下不要使用Documents集合中的索引值来引用文档,因为当其它 文档打开或关闭时,某个特定文档的索引值可能会随之改变。通常,您可以通过 使用ActiveDo
5、cument属性或使用Documents集合的Add方法或Open方法创 建的Document对象变量。以下示例显75了如何使用ActiveDocument属性把一 个地址添加到当前具有焦点的文档中:With ActiveDocument Address :='Office Talk" _& vbCrLf & "One Microsoft Way" & vbCrLf _& "Redmond, WA 98052", ReturnAddress:= _"David Shank" &
6、 vbCrLf & _"77 First Street" & vbCrLf"Any Town, USA 12345"End With下而的示例说明如何通过使用Documents集合的Open方法,实例化Document对象变量。Dim docPolicy AsSet docPolicy = Cc:my documents'")最后一个示例显示如何通过使用Add方法,为新的空文档创建Document对象的实例。Dim docPolicyAsSet docPolicy通过使用Open方法打开的文档,或者通过使用Add方法创建
7、的文档,都将成为用ActiveDocument属性表不的当前活动文档。如果您想使Documents 集合里的其它文档成为活动文档,可使用Document对象的Active方法。一旦您获取了要操作的Document对象,绝大部分您想通过VBA进行的工 作将涉及文本的操作.首先要指定文档的一个部分,然后对它进行某些操作。例 如,添加或删除文本,或者设置单词或字符的格式。您可以使用Range或Selection这两个对象来完成很多工作。在本月的专栏中,我将只讨论Range 对象。下个月我们将进一步讨论Selection对象的具体内容。理解Word的段落标记当您通过程序处理文本时,必须理解Word如何
8、处理段落标记。从根本上来 看,Word文档不过是一个巨大的字符流。人们倾向于认为文档是单词、句子和 段落的集合。但实际上,文档就是一些字符。每个字符都有一定的作用。某些字 符是字母、空格或制表符,另一些字符是段落标记或分页符。段落标记在Word文档中扮演独特的角色,有时这种角色容易被误解。段落 包含一个段落标记以及所有位于此段落标记和前一个段落标记之间的文本(不包 括前一个段落标记)。另外,重要的是,段落标记本包含该段落的所有格式信当复制单词、句子和段落时,如果包含段落标记,则所有包含在段落标记中 的格式信息也被复制,并在它们被粘贴到其它位置时应用于所属段落。如果您想从段落中复制文本并将其粘贴
9、到另一个段落中,但不想同时复制段 落格式,复制时请不要包括您要复制的文本旁边的段落标记。每个空白的Word文档仅有一个段落标记,其中同时包含Character对 象、Word对象、Sentence对象和Paragragh对象各一个。但是,"属性"对 话框(“文件”菜单)中的“统计信息”选项卡将报告空白文档中没有字符.单 词.句子和段落。这种差异突出显示了 Word的一个重要侧面,当编程操作这些 对象时,您需要特别注意这一点。Range对象Range对象表示文档中的一个连续范|韦|,由一个起始字符位置和一个终止字 符位置定义。这个连续范围可以小到一个插入点,大到整个文档。它也
10、可能是(而非必须是)由当前节表示的范围。您也可以定义一个Range对象,表示和当前节不同的范W。也可以在同一个文档中定义多个Range对象。Range对象 中的字符包含非打印字符,例如,空格.回车符和段落标记。使用Rang©对象创建Range对象的典型方法为:声明一个Range类型的对象变量,然后用Document 对象的 Range 方法或另一个对象(例如 CharacterWord、Sentence 或Selection对象)的Range属性来实例化该变量。例如,以下代码创建了两 个Range对象,均表示活动文档中的第二个句子。Dim rngRangeMethod AsDim r
11、ngRangeProperty AsWith ActiveDocumentIf . >= 2 ThenSet rngRangeMethod = . Range (. Sentences(2). Start, _ Sentences(2). End)Set rngRangeProperty = . Sentences (2)End IfEnd With当您使用Range方法来指定文档的特定范ffl时,您必须使用此方法的Start参数指定这个范I韦1开始的位置,使用End参数指定结朿的位置。文档的第一个字符的字符位置为Oo最后一个字符的位置和文档的字符总数相等。您可 以通过使用Charact
12、ers集合的Count属性确定文档中的字符数。如前面的示 例所不,您也可以使用Bookmarks Selection或Range对象的Start和End 属性來指定Range方法的Start和End参数。您可以将Start和End参数设 置为同一个数字,这将创建一个不包含任何字符的范您可以使用对象的SetRange方法设置或重新定义Range对象的内容。您 也可以通过使用Range对象的Start属性或MoveStart方法指定或重新定义 范围开始的位置。同样地,您也可以通过使用Range对象的End属性或它的MoveEnd方法指定或重新定义范围结束的位置。以下示例先用ContentRagne
13、对象,该对象包含了文档的所有内容。接着, 改变EndSetRange方法重新定义范使之包含文档的第一个段落。最后,使 用MoveEnd方法将范围的结束位置扩展至文档的第二个段落末尾。此示例中的 每一步都将当前范ffl中包含的字符的数量打印到“立即窗口”。Sub RangeExaraple ()Dim rngSaraple As RangeSet rngSample =With rngSample范围现在包含范围现在包含.End = (l).End.SetRange Start:=0, End: =Paragraphs(1).范围现在包含 & _ MoVeEnd Unit: =wdPar
14、agraph, Count: =1范围现在包含_End WithEnd Sub您也可以通过使用对象的Find属性返回Find对象,重新定义Range对 象。以下示例演示用Find属性在活动文档中确定文本的位置。如果找到了文 本,Range对象将自动重新定义以包含符合搜索条件的文本。WithClearForraattingIf Execute(FindText:二"Find Me!") Then'rngRangeText被重新定义。End IfEnd With许多Word对象具有可返回Range对象的Range属性。在您需要使用Range对象的属性和方法进行操作,而对
15、象本身又不提供这些属性和方法的情况 下,您可以使用对象的Range属性返回Range对象。例如,以下代码使用Paragragh对象的Range属性返回Range对象,从而设置文档第一个段落中文 本的格式:Dim rngPara As RangeSet rngPara = (1). RangeWith rngPara Bold = True = wdAlignParagraphCenter"Arial"End With定义Range对象后,您可以应用此对象的方法和属性修改所指定范围的内 容或获取有关信息。例如,您可以使用Range对象的StoryType属性來确定Range在
16、文档中的位置。处理Range对象中的文本可以使用Range对象的Text属性来指定或确定该范围包含的文本。例 如,以下代码首先显示了 Range对象中的文本,然后更改文本并显示新文本, 最后还原为原始文本。此示例说明了如何使用Range对象的Range属性将文本 复制和粘贴到文档中并同时保持原段落结构不变。请注意在strNewText变量中 包含段落标记(vbCrLf)的新文本如何替换在选定原段落时包含的段落标记。Public Sub ChangeTextSample()Dim rngText As RangeDim strOriginalText As StringDim strNewTex
17、t As StringStrNewText = "This text is replacing the original _text in the first paragraph of the active" _ document. This is all done using only the" _Text property of the Range object!" & vbCrLfSetrngText = (1). RangeWith rngTextMsgBox . Text, vbOKOnly, "This is the ori
18、ginal text."StrOriginalText = . Text Text = StrNewTextMsgBox . Text, vbOKOnly, "This is the new text" _& " inserted in paragraph 1." Text = StrOriginalTextMsgBox "The original text is restored."您可以使用Range对象的StoryType属性确定范围在文档中的位置。文档 构成部分是指文档中包含文本的特定范鬧。在一个文档中最多可
19、以有11种文档 构成部分,表示正文、页眉、页脚、批注等不同范围。您可以使用StoryRanges 属性返回StoryRanges集合。StoryRanges集合包含Range对象,表示文档中 的每一个文档构成部分。新Word文档只包含一个文档构成部分,称为"Main Text",表示文档主 体部分的文本。即使一个空白文档也包含字符、单词.句子和段落各一个。您不需要专门将新文档构成部分添加至文档。当您把文本添加至文档的某个 部分(11种文档构成部分之一)时,Word会目动添加它们。例如,如果您要添 加页脚,Word将添加Footnotes文档构成部分。如果您要添加批注,Wor
20、d将 把Comments文档构成部分添加到文档的StoryRanges集合中。您可以使用Range属性返回Range对象来表示文档中的每一个文档构成部 分。例如,以下代码打印与Main Text和Comments文档构成部分相关的文 本:Dim rngMainText AsDim rngCommentsText AsSet rngMainText = (wdMainTextStory)Set rngComments = (wdComment sStory)使用Range对象的InsertBefore或InsertAfter方法,可将文本添加至 现有Range对象。事实上,有一整类方法,名称以“
21、Insert"开头,可以用于 操作Range对象o如果有1个过程,能够把Range对象的InsertBefore和InsertAfter方 法与Text属性结合,那么它将非常有用。在编程处理文本时,就可以使用这个 过程在同一个地方处理大量工作。以下所示的InsertTextlnRange正是这样一 个过程。无论何时您需要将文本添加到Range对象,都可以调用InsertTextInRange过程©换句话说,无论何时您需要在Word文档中编程更改 现有的文本,这一过程都将非常有用。InsertTextInRange过程使用两个必要的变量和一个可选的变量。strNewText变
22、量包含您想要添加至Range对象的文本,此对象在rngRange变 量中指定。intInsertMode可选变量指定将新文本添加至范围的方式。变量的值 是三个自定义枚举常数中的一个,指定是否使用InsertBefore方法、InsertAfter方法或Text属性替换现有的范围文本。Public Enum opgTextInsertModeBeforeAfterReplaceFunction InsertTextInRange(strNewText As String, _Optional rngRange As , _End EnumOptional intInsertMode As opg
23、TextInsertModeReplace) As Boolean'此过程将strNewText参数指定文本插入'rngRange指定的Range对象中。它调用' I sLas t Char Paragraph 过程从 rngRange'对象清除后续的段落标记。Call IsLastCharParagraph(rngRange, True)With rngRangeSelect Case intInsertModeCase 0 '在范M之前插入文本。 InsertBefore strNewTextCase 1 '在范围之后插入文本。 Insert
24、After strNewTextCase 2 '替换范圉中的文本。 Text = StrNewTextCase ElseInsertTextInRange = TrueEnd WithEnd SelectEnd Function请注意,在范围中插入文本之前,使用了 IsLastCharParagraph过程来删除最后一个段落的段落标记。以下示例使用Chr$ 0函数,以字符代码13表示段落标记。Function IsLastCharParagraph(ByRef rngTextRange As , _Optional blnTrimParaMark As Boolean = False)
25、 As Boolean'本过程接受字符、单词、句子或段落Range'作为第一个参数。如果范围中的最后一个字符'是段落标记,则返回True;否则返回Falseo'本过程还接受一个Boolean参数,用于指定'当文本最后存在段落标记时,是否将其删除。'当blnTrimParaMark参数为True时,本过'程调用本身来删除所有后续的段落标记。Dim strLastChar As StringstrLastChar = Right$, 1)If InStr (strLastChar, Chr$(13) = 0 ThenIsLastCharParagraph = FalseExit FunctionElseIsLastCharParagraph = TrueIf Not b1nTrimParaMark = True ThenExit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年风能发电在建筑电气设计中的案例分析
- 2026年全球土木工程人才市场分析
- 2026春招:行政主管真题及答案
- 2026春招:销售代表题目及答案
- 2026春招:西部航空笔试题及答案
- 生物材料在骨科中的应用
- 2026年黑龙江农业职业技术学院高职单招职业适应性测试备考题库有答案解析
- 2026年广西建设职业技术学院单招综合素质考试备考题库带答案解析
- 货品进出安全培训课件
- 护理专业实习生教育实践
- 安全生产业务操作规程范文(2篇)
- GB/T 44748.1-2024筛分试验第1部分:使用金属丝编织网和金属穿孔板试验筛的方法
- 预制混凝土构件质量控制
- 德佑房屋买卖合同
- 健康管理方案设计案例分析
- 2024高考英语应用文写作真题手把手:2023全国乙卷素材
- 玻璃加工公司管理制度
- 七年级数学一元一次方程应用题复习题及答案
- 储能电站检修规程
- 离婚冷静期制度的构建与完善
- 外挂钢楼梯专项施工方案
评论
0/150
提交评论