word vba 详解
wordvba详解
wordvba详解(转一)2021-07-1209:29office中的word作者:davidshank
在所有office应用程序中,microsoftword可能将就是应用领域最广为的应用程序,它还经常在自定义office解决方案中饰演关键的角色。开发人员用各种相同的方式采用word,存有一些方式很直观,而另一些极其繁杂。无论牵涉何种自定义解决方案,用visualbasicforapplications(vba)处置word文档的基本方法都就是一样的。在本月的栏目中,我将归纳地了解如何采用word,并提供更多一些关于如何运用range对象处置word文档内容的详细资料。
理解基本方法在word中,几乎所有的操作都要调用document(记录)对象本身或其内容。当您用vba操作word时,document对象表示一个打开的文档,而且所有的document对象都是application对象的documents集合的成员。
文档就是一个由字符、单词、句子和段落共同组成的子集,字符共同组成单词,单词共同
组成句子,句子共同组成段落,等等。因此,每一个document对象都具备characters(字符)、words(分类号单词)、ntences(句子)和paragraghs四个子集。此外,每个文档具备一个涵盖一个或多个节的ctions子集,每一个节都存有一个涵盖该节在页眉和页脚的headersfooters子集。
注意:您可以在microsoftoffice2000开发人员对象模型指南(英文)中查阅完整的word对象模型。另外,您也可以使用对象浏览器和microsoftwordvisualbasic参考帮助来学习有关具体某个对象、属性、方法和事件的详细内容。
通过vba采用word时,document对象处在中心边线。如果您必须打开文档或建立崭新文档,就要建立代莱document对象。每个关上或新创建的文档均被嵌入至documents子集。具备焦点的文档称作活动文档,由activedocument属性则表示。
document对象作为documents集合中的一个成员,您可以通过使用document对象的索引值(document对象在documents集合中的位置,1是集合中的第一个文档)或名称来引用它。另外,您也可以使用activedocument属性来引用当前具有焦点的文档。例如,如果名为policies.doc的文档是唯一打开的文档,则以下三个对象变量将全部指向policies.doc:
dimdoconeasword.documentdimdoctwoasword.documentdimdocthreeasword.document
tdocone=documents(1)
tdoctwo=documents(\tdocthree=activedocument
一般情况下不要使用documents集合中的索引值来引用文档,因为当其它文档打开或关闭时,某个特定文档的索引值可能会随之改变。通常,您可以通过使用
activedocument属性或采用documents子集的add方法或open方法建立的document对象变量。以下示例表明了如何采用activedocument属性把一个地址嵌入至当前具备焦点的文档中:
withactivedocument
戒烟壁纸 .envelope.inrtaddress:=\talk\
&vbcrlf&\microsoftway\&\wa98052\\shank\\firststreet\\town,usa12345\endwith
老花眼镜
下面的示例表明如何通过采用documents子集的open方法,实例化document对象变量。
dimdocpolicyasword.document爱布瀑布群
tdocpolicy=documents.open(\documents\\policies.doc\
最后一个示例显示如何通过使用add方法,为新的空文档创建document对象的实例。
dimdocpolicyasword.documenttdocpolicy=documents.add
一只手套 通过使用open方法打开的文档,或者通过使用add方法创建的文档,都将成为用activedocument属性表示的当前活动文档。如果您想使documents集合里的其它文档成为活动文档,可使用document对象的active方法。
一旦您以获取了为操作方式的document对象,绝大部分您想要通过vba展开的工作将牵涉文本的操作方式。首先必须选定文档的一个部分,然后对它展开某些操作方式。比如,嵌入或删掉文本,或者设置单词或字符的格式。您可以采用range或lection这两个对象去
顺利完成很多工作。在本月的专栏中,我将只探讨range对象。下个月我们将进一步探讨lection对象的具体内容。
理解word的段落标记
当您通过程序处理文本时,必须认知word如何处置段落标记。从根本上来看,word文档不过就是一个非常大的字符流。人们女性主义于指出文档就是单词、句子和段落的子集。但实际上,文档就是一些字符。每个字符都存有一定的促进作用。某些字符就是字母、空格或制表符,另一些字符就是段落标记或分页符令。
段落标记在word文档中扮演独特的角色,有时这种角色容易被误解。段落包含一个段落标记以及所有位于此段落标记和前一个段落标记之间的文本(不包括前一个段落标记)。另外,重要的是,段落标记本包含该段落的所有格式信息。
当激活单词、句子和段落时,如果涵盖段落标记,则所有涵盖在段落标记中的格式信息也被激活,并在它们被粘贴至其它边线时应用于所属段落。
如果您想从段落中复制文本并将其粘贴到另一个段落中,但不想同时复制段落格式,复
制时请不要包括您要复制的文本旁边的段落标记。
wordvba揭秘(转回二)2021-07-1209:29
每个空白的word文档仅有一个段落标记,其中同时包含character对象、word对象、ntence对象和paragragh对象各一个。但是,“属性”对话框(“文件”菜单)中的“统计信息”选项卡将报告空白文档中没有字符、单词、句子和段落。这种差异突出显示了word的一个重要侧面,当编程操作这些对象时,您需要特别注意这一点。
range对象账户名称
range对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义。这个连续范围可以小到一个插入点,大到整个文档。它也可能是(而非必须是)由当前节表示的范围。您也可以定义一个range对象,表示和当前节不同的范围。也可以在同一个文档中定义多个range对象。range对象中的字符包含非打印字符,例如,空格、回车符和段落标记。
采用range对象
社火的由来 创建range对象的典型方法为:声明一个range类型的对象变量,然后用document对象的range方法或另一个对象(例如character、word、ntence或lection对象)的range属性来实例化该变量。例如,以下代码创建了两个range对象,均表示活动文档中的第二个句子。
dimrngrangemethodasword.rangedimrngrangepropertyasword.range
withactivedocument
unt>=2then
trngrangemethod=.range(.ntences(2).start,_.ntences(2).end)
trngrangeproperty=.ntences(2)endifendwith
当您使用range方法来指定文档的特定范围时,您必须使用此方法的start参数指定这个范围开始的位置,使用end参数指定结束的位置。文档的第一个字符的字符位置为0。最后一个字符的位置和文档的字符总数相等。您可以通过使用characters集合的count属性确定
文档中的字符数。如前面的示例所示,您也可以使用bookmark、lection或range对象的start和end属性来指定range方法的start和end参数。您可以将start和end参数设置为同一个数字,这将创建一个不包含任何字符的范围。
我工作 您可以采用对象的trange方法设置或再次定义range对象的内容。您也可以通过采用range对象的start属性或movestart方法选定或再次定义范围已经开始的边线。同样地,您也可以通过采用range对象的end属性或它的moveend方法选定或再次定义范围完结的边线。
以下示例先用contentragne对象,该对象包含了文档的所有内容。接着,改变endtrange方法重新定义范围,使之包含文档的第一个段落。最后,使用moveend方法将范围的结束位置扩展至文档的第二个段落末尾。此示例中的每一步都将当前范围中包含的字符的数量打印到“立即窗口”。
subrangeexample()
dimrngsampleasrange
t
withrngsample
debug.print\范围现在涵盖\&\个字符。\
.s(1).end
debug.print\范围现在涵盖\&\个字符。\
.trangestart:=0,end:=activedocument._paragraphs(1).d
debug.print\范围现在涵盖\&\个字符。\
.moveendunit:=wdparagraph,count:=1
debug.print\范围现在涵盖\&\个字符。\endwithendsub教学设计模板
您也可以通过使用对象的find属性返回find对象,重新定义range对象。以下示例演示用find属性在活动文档中确定文本的位置。如果找到了文本,range对象将自动重新定义以包
含符合搜索条件的文本。
withrngrangetext.find.clearformatting