admin 管理员组

文章数量: 1184232


2024年3月14日发(作者:计算机二级mysql有用吗)

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(分类号单词)、sentences(句子)和paragraghs四个子

集。此外,每个文档具备一个涵盖一个或多个节的sections子集,每一个节都存有一个

涵盖该节在页眉和页脚的headersfooters子集。

注意:您可以在microsoftoffice2000开发人员对象模型指南(英文)中查阅完整的

word对象模型。另外,您也可以使用对象浏览器和microsoftwordvisualbasic参考帮助

来学习有关具体某个对象、属性、方法和事件的详细内容。

通过vba采用word时,document对象处在中心边线。如果您必须打开文档或建立崭

新文档,就要建立代莱document对象。每个关上或新创建的文档均被嵌入至documents

子集。具备焦点的文档称作活动文档,由activedocument属性则表示。

document对象作为documents集合中的一个成员,您可以通过使用document对象的

索引值(document对象在documents集合中的位置,1是集合中的第一个文档)或名称来

引用它。另外,您也可以使用activedocument属性来引用当前具有焦点的文档。例如,

如果名为的文档是唯一打开的文档,则以下三个对象变量将全部指向

nt

setdocone=documents(1)

setdoctwo=documents(setdocthree=activedocument

一般情况下不要使用documents集合中的索引值来引用文档,因为当其它文档打开或

关闭时,某个特定文档的索引值可能会随之改变。通常,您可以通过使用

activedocument属性或采用documents子集的add方法或open方法建立的document

对象变量。以下示例表明了如何采用activedocument属性把一个地址嵌入至当前具备焦

点的文档中:

withactivedocument

.address:=talk

&vbcrlfµsoftway&wa98052shankfirststreettown,usa12345endwith

下面的示例表明如何通过采用documents子集的open方法,实例化document对象变

量。

nt

setdocpolicy=(

最后一个示例显示如何通过使用add方法,为新的空文档创建document对象的实例。

ntsetdocpolicy=

通过使用open方法打开的文档,或者通过使用add方法创建的文档,都将成为用

activedocument属性表示的当前活动文档。如果您想使documents集合里的其它文档成为

活动文档,可使用document对象的active方法。

一旦您以获取了为操作方式的document对象,绝大部分您想要通过vba展开的工作

将牵涉文本的操作方式。首先必须选定文档的一个部分,然后对它展开某些操作方式。比

如,嵌入或删掉文本,或者设置单词或字符的格式。您可以采用range或selection这两

个对象去顺利完成很多工作。在本月的专栏中,我将只探讨range对象。下个月我们将进

一步探讨selection对象的具体内容。

理解word的段落标记

当您通过程序处理文本时,必须认知word如何处置段落标记。从根本上来看,word

文档不过就是一个非常大的字符流。人们女性主义于指出文档就是单词、句子和段落的子

集。但实际上,文档就是一些字符。每个字符都存有一定的促进作用。某些字符就是字母、

空格或制表符,另一些字符就是段落标记或分页符令。

段落标记在word文档中扮演独特的角色,有时这种角色容易被误解。段落包含一个

段落标记以及所有位于此段落标记和前一个段落标记之间的文本(不包括前一个段落标

记)。另外,重要的是,段落标记本包含该段落的所有格式信息。

当激活单词、句子和段落时,如果涵盖段落标记,则所有涵盖在段落标记中的格式信

息也被激活,并在它们被粘贴至其它边线时应用于所属段落。

如果您想从段落中复制文本并将其粘贴到另一个段落中,但不想同时复制段落格式,

复制时请不要包括您要复制的文本旁边的段落标记。

wordvba揭秘(转回二)2021-07-1209:29

每个空白的word文档仅有一个段落标记,其中同时包含character对象、word对象、

sentence对象和paragragh对象各一个。但是,“属性”对话框(“文件”菜单)中的

“统计信息”选项卡将报告空白文档中没有字符、单词、句子和段落。这种差异突出显示

了word的一个重要侧面,当编程操作这些对象时,您需要特别注意这一点。

range对象

range对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定

义。这个连续范围可以小到一个插入点,大到整个文档。它也可能是(而非必须是)由当

前节表示的范围。您也可以定义一个range对象,表示和当前节不同的范围。也可以在同

一个文档中定义多个range对象。range对象中的字符包含非打印字符,例如,空格、回

车符和段落标记。

采用range对象

创建range对象的典型方法为:声明一个range类型的对象变量,然后用document

对象的range方法或另一个对象(例如character、word、sentence或selection对象)

的range属性来实例化该变量。例如,以下代码创建了两个range对象,均表示活动文档

中的第二个句子。

withactivedocument

>=2then

setrngrangemethod=.range(.sentences(2).start,_.sentences(2).end)

setrngrangeproperty=.sentences(2)endifendwith

当您使用range方法来指定文档的特定范围时,您必须使用此方法的start参数指定

这个范围开始的位置,使用end参数指定结束的位置。文档的第一个字符的字符位置为0。

最后一个字符的位置和文档的字符总数相等。您可以通过使用characters集合的count

属性确定文档中的字符数。如前面的示例所示,您也可以使用bookmark、selection或

range对象的start和end属性来指定range方法的start和end参数。您可以将start

和end参数设置为同一个数字,这将创建一个不包含任何字符的范围。

您可以采用对象的setrange方法设置或再次定义range对象的内容。您也可以通过

采用range对象的start属性或movestart方法选定或再次定义范围已经开始的边线。同

样地,您也可以通过采用range对象的end属性或它的moveend方法选定或再次定义范围

完结的边线。

以下示例先用contentragne对象,该对象包含了文档的所有内容。接着,改变

endsetrange方法重新定义范围,使之包含文档的第一个段落。最后,使用moveend方法

将范围的结束位置扩展至文档的第二个段落末尾。此示例中的每一步都将当前范围中包含

的字符的数量打印到“立即窗口”。

subrangeexample()

dimrngsampleasrange

setrngsample=t

withrngsample

范围现在涵盖&个字符。

.end=ces(1).end

范围现在涵盖&个字符。

.setrangestart:=0,end:=activedocument._paragraphs(1).

范围现在涵盖&个字符。

.moveendunit:=wdparagraph,count:=1

范围现在涵盖&个字符。endwithendsub

您也可以通过使用对象的find属性返回find对象,重新定义range对象。以下示例

演示用find属性在活动文档中确定文本的位置。如果找到了文本,range对象将自动重新

定义以包含符合搜索条件的文本。

ormatting

e(findtext:=me!'rngrangetext被重新定义。endifendwith

许多word对象具备可以回到range对象的range属性。在您须要采用range对象的

属性和方法展开操作方式,而对象本身又不提供更多这些属性和方法的情况下,您可以采

用对象的range属性回到range对象。比如,以下代码采用paragragh对象的range属性

回到range对象,从而设置文档第一个段落中文本的格式:

dimrngparaasrange

setrngpara=aphs(1).rangewithrngpara

.bold=true

.ent==endwith

定义range对象后,您可以应用此对象的方法和属性修改所指定范围的内容或获取有

关信息。例如,您可以使用range对象的storytype属性来确定range在文档中的位置。

例一)

'载入excel数据至wordsubexcel载入word()

dimi1asinteger,str1asstring,str2asstring,arr1()i1=range(arr1=range(str1=this

r2=基本数据

setwd=createobject(e=true

filename:=str1&fori1=1toubound(arr1)

xt(join((arr1,i1),载入

ragraph'下划线

next

etwd=nothingendsub


本文标签: 对象 文档 字符