Word VBA 学习交流三.docx

上传人:b****5 文档编号:5024495 上传时间:2022-12-12 格式:DOCX 页数:21 大小:25.83KB
下载 相关 举报
Word VBA 学习交流三.docx_第1页
第1页 / 共21页
Word VBA 学习交流三.docx_第2页
第2页 / 共21页
Word VBA 学习交流三.docx_第3页
第3页 / 共21页
Word VBA 学习交流三.docx_第4页
第4页 / 共21页
Word VBA 学习交流三.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Word VBA 学习交流三.docx

《Word VBA 学习交流三.docx》由会员分享,可在线阅读,更多相关《Word VBA 学习交流三.docx(21页珍藏版)》请在冰豆网上搜索。

Word VBA 学习交流三.docx

WordVBA学习交流三

WordVBA学习交流(三)

WordVBA学习交流(三)

2008-01-0821:

00:

35|分类:

Office办公软件|字号订阅

WordVBA学习交流

将Range对象赋给变量

有多种方法将现有的Range对象赋给变量。

本主题对两种不同的方法进行了阐述。

在下列示例中,将Range对象赋给变量Range1和Range2。

例如,下列指令(通俗的话就是:

下列语句)将活动文档中的第一个和第二个单词赋给变量Range1和Range2。

SetRange1=ActiveDocument.Words

(1)

SetRange2=ActiveDocument.Words

(2)

'注意:

1.Words对象是Range对象,它不存在Word对象,你可以这样命名:

dimword1asrange,,但是dimword1asword是不行的,也是错的。

2.Words直观的说就是单词,那么,什么是单词呢?

中文中没有单词的概念啊!

可以这样来理解,英文的单词是以空格分隔的,所以单词就是二个空格之间的字母加空格。

(实验证明,确实是这样的)不过,这与我们的关系不大(因为我们大多处理的是中文)。

那么中文的“Word”是怎么回事呢?

是词组?

还是每个汉字呢?

其实我也不知道,我是这样来做的,在VBA中输入如下的程序:

Sub中文Word()

Dimrange1AsRange

Setrange1=ActiveDocument.Words

(1)

range1.select

MsgBoxrange1

EndSub

再新建一个Word,输入这样的的汉字“[a彼岸赋好彼岸变量”(不包括红色的双引号),按F8分别测试Words

(1)、Words

(2)、Words(3)、Words(4)、Words(5)、Words(6)等,发现什么没有。

我发现了如下的规律:

①标点符号在中文中算是一个Word单位;②字母或者单词后面的空格不算一个Word单位,再英文如果没有结标记则包括后面的空格(例如:

"atheas.",则第一个是a,(注意后面有空格),当然最后的.不包括在前一个as内。

所以,以上总共有4个Words,你可以用这个来测试。

ActiveDocument.Words

(1).Select,ActiveDocument.Words.count);③除此以外,只有汉字与汉字之间的空格算一个Word单词;④有的Word是一个汉字,有的是二个汉字,可能有的还是三个汉字,这是为什么呢?

我们打开微软的输入法,再用“彼岸”及“变量”的拼音输入,可以看到这是一个词组(如下图)所以我想,有的一个是汉字,有的二个是汉字,他“可能”是根据微软的输入法中的词组定义相一致的。

⑤当然,你也可以看看Words集合来看一下这个对象。

当然,可能没我说的简单、易懂。

当然words对象的不确定性,决定了他使用的频率。

如果你看懂我的上面所说,对于words对象基本就OK了。

'注意range对象的赋值就是这样seta=b,变量的赋值就是a=1,但对象就必须这样赋值!

(包括任意的对象,Set是对对象赋值的标准语句)

将一个Range对象变量设置为等于另一个Range对象变量

下列指令(语句)将名为Range2的区域变量设为与Range1代表的位置相同。

SetRange2=Range1'译为:

设置Range2对象与Range1代表的位置相同

现在两个变量代表同一区域。

修改Range2的起点、终点或其中的文本将影响Range1,反之亦然。

请注意,以下指令等价于Range2.Text=Range1.Text。

该指令指定Range2的默认属性(Text属性)为Range1的默认属性。

但该指令并不修改其实际引用的对象。

Range2=Range1

Range2和Range1区域具有相同的内容,但它们可能对应文档中的不同位置,甚至对应不同的文档。

'上面这句有点难懂,用程序来说明吧(以后大多是这样,因为我们是学习VBA,只有通过程序来说明内容)

Sub测试Range1等于Range2()

Dimrange1AsRange,range2AsRange

Setrange1=ActiveDocument.Range(0,1)'文档的第一个区域(字)

Setrange2=ActiveDocument.Range(1,2)'文档的第二个区域(字)

MsgBoxrange1'输出第一个字

MsgBoxrange2'输出第二个字

range2=range1'把第一个(字)的区域的字赋值给第二个区域

MsgBoxrange2'输出第二个区域(字)

'为什么我把字后面加括号,因为我们设置的是区域,就是范围小了点的区域,

'就一个字的区域,所以,也是字,但区域更准确。

EndSub

当然,与第一例子类似,要新建一个文档,输入一定(只要二个)字来做测试,按F8一步一步来看,也行。

友情提醒:

以后大多是这样:

新建、输入、然后把代码复制到VBE中来测试。

使用Duplicate(复制)属性

下列指令创建一个Range对象的新副本Range2,它与Range1有相同的起点、终点和文本。

SetRange2=Range1.Duplicate

对Range1起点或终点的修改不影响Range2,反之亦然。

但是,由于这两个区域指向文档中的同一位置,对一个区域中文本的修改将影响另一个区域中的文本。

'我不知道为什么要使用这个Duplicate属性,上面都说是了Setrange2=range1不是好用的很吗?

不明白啊,或许以为你会发现的。

修改文档的某一部分(以后为细说对象时,说到这些,现在大致了解一些关键的东东)

VisualBasic包含一些对象,可用这些对象修改下列文档元素:

字符、单词、句子、段落和节。

下表包含与这些文档元素相对应的属性和这些属性返回的对象。

表达式

返回的对象

 

Words(index)

Range(注意Words返回的是Range对象)

 

Characters(index)

Range(注意Characters返回的是Range对象)

 

Sentences(index)

Range(注意Sentences返回的是Range对象)

 

Paragraphs(index)

Paragraph

 

Sections(index)

Section(这个是“节”,就是插入、分隔符中的“节”)

如果使用这些属性时不带索引序号,则返回一个具有相同名称的集合对象。

例如,Paragraphs属性返回Paragraphs集合对象。

但是如果通过索引序号识别集合中的一项,则返回上表中第二列中的对象。

例如,Words

(1)返回一个Range对象(注意不是Word对象噢)。

有了一个Range对象之后,可以使用任何区域属性或方法修改该Range对象。

例如,下列指令将所选内容的第一个单词复制到“剪贴板”。

SubCopyWord()

Selection.Words

(1).Copy

EndSub

'仅供参考!

注释Paragraphs和Sections集合中的项是该集合的单个成员,而不是Range对象。

但是(返回Range对象的)Range属性对Paragraph和Section对象都可用。

例如,下列指令将活动文档的第一段复制到“剪贴板”。

SubCopyParagraph()

ActiveDocument.Paragraphs

(1).Range.Copy

EndSub

上述表格中的所有文档元素属性对Document、Selection和Range对象都可用。

下列示例阐明了如何使用Document、Selection和Range对象的这些属性。

下列示例设置活动文档中第一个单词的大小写。

SubChangeCase()

ActiveDocument.Words

(1).Case=wdUpperCase

EndSub

下列示例将当前节的下边距设为0.5英寸(前台是通过页边距来做)。

SubChangeSectionMargin()

Selection.Sections

(1).PageSetup.BottomMargin=InchesToPoints(0.5)

EndSub

下列示例将活动文档的字符间距设为两倍(Content属性返回一个Range对象)。

SubDoubleSpaceDocument()

ActiveDocument.Content.ParagraphFormat.Space2'Space2是2倍的缩写

EndSub

修改一组文档元素

若要修改由一组文档元素(字符、单词、句子、段落或节)组成的某区域的文字,需要创建一个Range对象。

Range方法根据开始和结束位置可创建Range对象。

例如,下列指令创建一个Range对象,该对象引用活动文档的前十个字符。

SubSetRangeForFirstTenCharacters()

DimrngTenCharactersAsRange

SetrngTenCharacters=ActiveDocument.Range(Start:

=0,End:

=10)

EndSub

'没记错的话,这个例子以前用过,以后有这种情况,就是一个例子反复使用,但角度不同。

使用Range对象的Start和End属性可创建一个新的Range对象,该对象引用一组文档元素。

例如,下列指令创建一个引用活动文档中前三个单词的Range对象(myRange)。

SubSetRangeForFirstThreeWords()

DimdocActiveAsDocument

DimrngThreeWordsAsRange

SetdocActive=ActiveDocument'设置变量

SetrngThreeWords=docActive.Range(Start:

=docActive.Words

(1).Start,_

End:

=docActive.Words(3).End)

EndSub

下列示例创建一个Range对象(aRange),该对象从第二段的开头开始,在第三段之后结束。

SubSetParagraphRange()

DimdocActiveAsDocument

DimrngParagraphsAsRange

SetdocActive=ActiveDocument

SetrngParagraphs=docActive.Range(Start:

=docActive.Paragraphs

(2).Range.Start,_

End:

=docActive.Paragraphs(3).Range.End)

EndSub

引用活动文档元素

要引用活动的段落、表格、域或其他文档元素,可使用Selection属性返回一个Selection对象。

通过Selection对象,可访问选定内容中的所有段落或第一段。

下列示例将边框应用于选定内容的第一段。

SubBorderAroundFirstParagraph()

Selection.Paragraphs

(1).Borders.Enable=True

EndSub

下列示例将边框应用于选定内容中的每一个段落。

SubBorderAroundSelection()

Selection.Paragraphs.Borders.Enable=True

EndSub

下列示例将底纹应用于选定内容中第一张表格的首行。

SubShadeTableRow()

Selection.Tables

(1).Rows

(1).Shading.Texture=wdTexture10Percent

EndSub

如果选定的内容不包含表格,将导致出错。

可使用Count(计数)属性判定选定内容中是否包含表格。

下列示例将底纹应用于选定内容中第一张表格的首行。

SubShadeTableRow()

IfSelection.Tables.Count>=1Then

Selection.Tables

(1).Rows

(1).Shading.Texture=wdTexture25Percent

Else

MsgBox"Selectiondoesn'tincludeatable"

EndIf

EndSub

下列示例将底纹应用于选定内容中每张表格的首行。

ForEach...Next循环用于在选定内容的每张表格中循环。

SubShadeAllFirstRowsInTables()

DimtblTableAsTable

IfSelection.Tables.Count>=1Then'判断选中区域是否存在表格

ForEachtblTableInSelection.Tables'这是在选中表中循环的标准写法

tblTable.Rows

(1).Shading.Texture=wdTexture30Percent

NexttblTable

EndIf

EndSub

使用Word对象

(这一部分不需要了解太深,以后用到时,还会详细的解释这些。

原因有二:

第一,这个比较抽象,第二,使用的频率不高。

PS:

我的《身份证号码自动提取信息》的原理就是这个知识,但遗憾的是大多人看不懂。

使用Application对象事件

若要创建Application对象事件的事件处理器,需要完成下列三个步骤:

在类模块中声明对应于事件的对象变量。

编写特定事件过程。

从其他模块中初始化声明的对象。

一、声明对象变量

在为Application对象事件编写过程之前,必须创建新的类模块并声明一个包含事件的Application类型对象。

例如,假定已创建新的类模块并命名为EventClassModule。

该类模块包含下列代码:

PublicWithEventsAppAsWord.Application

编写事件过程

定义了包含事件的新对象后,它将出现在类模块的“对象”下拉列表框中,然后可为新对象编写事件过程。

(在“对象”框中选定新对象后,用于该对象的有效事件将出现在“过程”下拉列表框中)从“过程”下拉列表框中选择一个事件,在类模块中会增加一空过程。

PrivateSubApp_DocumentChange()

EndSub

初始化已声明的对象

在运行过程之前,必须将类模块中已声明的对象(本例中为App)连接到Application对象。

您可在任何模块中使用下列代码:

DimXAsNewEventClassModule

SubRegister_Event_Handler()

SetX.App=Word.Application

EndSub

运行Register_Event_Handler过程。

运行该过程后,类模块中的App对象指向MicrosoftWordApplication对象,当事件发生时,将运行类模块中的事件过程。

使用Document对象的事件

Document对象支持多种事件,以响应文档状态。

若要在名为“ThisDocument”的类模块中编写响应这些事件的过程。

可用下列步骤创建事件过程。

在“工程资源管理器”窗口中的Normal工程或文档工程下,双击“ThisDocument”。

(“ThisDocument”位于“文件夹”视图中的“MicrosoftWord对象”文件夹中)。

从“对象”下拉列表框中选择“Document”。

从“过程”下拉列表框中选择一个事件。

类模块中即增加了一个空子程序。

添加要在事件发生时运行的VisualBasic指令。

下例显示了Normal工程中的一个New事件过程,它在新建一个基于Normal模板的文档时运行。

PrivateSubDocument_New()

MsgBox"Newdocumentwascreated"

EndSub

下例显示了文档工程中的Close事件过程,该过程只在该文档关闭时运行。

PrivateSubDocument_Close()

MsgBox"Closingthedocument"

EndSub

与自动宏不同,Normal模板中的事件过程没有全局区。

例如,Normal模板中的事件过程只有在附加模板为Normal模板时才发生。

如果文档及其附加模板中存在自动宏,则仅运行保存在文档中的自动宏。

如果文档及其附加模板中都存在文档事件过程,则两个事件过程都会运行。

使用ActiveX控件事件

(这部分主要是VB窗体的使用,对VB熟练的就OK,否则有点吃力,我也吃力。

但我想没关系,我虽做不出如花的界面,但功能上能完成,也就行了。

MicrosoftWord文档可包含ActiveX控件。

可用“控件工具箱”插入诸如命令按钮、复选框和列表框等ActiveX控件。

可使用下列步骤添加具有LostFocus事件的ActiveX复选框控件:

在Word中用鼠标右键单击工具栏,然后单击“控件工具箱”。

单击“复选框”控件。

活动文档中即插入一个复选框控件。

用鼠标右键单击复选框,然后单击“查看代码”。

Word会切换至“VisualBasic编辑器”并显示ThisDocument类模块,并在“对象”下拉列表框中选定该复选框。

在“过程”下拉列表框中选定LostFocus事件。

在类模块中会添加一个空过程。

添加要在事件发生时运行的VisualBasic指令。

下列示例显示在焦点离开CheckBox1时运行的LostFocus事件过程。

该宏用Value属性显示CheckBox1的状态(True为选定,False为清除)。

PrivateSubCheckBox1_LostFocus()

MsgBoxCheckBox1.Value

EndSub

若要查看事件过程的运行情况,可切换回包含该复选框的Word文档。

单击“控件工具箱”上的“退出设计模式”按钮。

选定或清除复选框,然后单击文档中的其他元素。

此时复选框失去焦点,LostFocus过程开始运行;Word会显示一个消息框,内容为True或False。

Word在Word文档中为ActiveX控件应用了LostFocus和GotFocus事件。

“过程”下拉列表框中列出的其他事件在“Microsoft窗体帮助”中有文档说明。

使用控件和对话框

(这一部分介绍的大多是关于窗体有关的东东,他与VB的类似,如果是VB高手,不用看的。

像我等低手,有些也看不明白,不过,我觉得无大碍。

我们更注重的内涵,而不是华丽的外表)

在文档中使用ActiveX控件

如果需要为用户提供复杂的交互方式,使用户可与宏进行直接交互而不受对话框的干扰,类似于将ActiveX控件添至自定义对话框,您可将控件直接添至文档。

使用下列步骤可将ActiveX控件添至文档。

有关在Word中使用ActiveX控件的特定信息,请参阅在文档中使用ActiveX控件。

将控件添至文档

若要向文档的图形层添加控件,请单击“控件工具箱”上的控件。

若要向文档的文本层添加控件,请按住Shift并单击“控件工具箱”上的控件。

设置控件属性

在设计模式下用鼠标右键单击控件,并单击“属性”以显示“属性”窗口。

初始化控件

可在过程中初始化控件。

编写事件过程

所有控件都有一系列预定义的事件。

例如,命令按钮有Click事件,当用户单击该命令按钮时,该事件发生。

您可编写事件发生时运行的事件过程。

运行代码时使用控件的值

可在运行时设置某些属性

创建自定义对话框

通过下列步骤创建自定义对话框:

创建用户窗体

在“VisualBasic编辑器”的“插入”菜单上,单击“用户窗体”。

将控件添至用户窗体

在“工具箱”中找到要添加的控件,并将控件拖至窗体上。

设置控件属性

在设计模式中用鼠标右键单击控件,并单击“属性”以显示“属性”窗口。

初始化控件

您可在显示窗体之前的过程中初始化控件,或为窗体的Initialize事件中添加代码。

编写事件过程

所有控件都有一系列预定义的事件。

例如,命令按钮有Click事件,在用户单击命令按钮时,该事件发生。

您可编写事件发生时运行的事件过程。

显示对话框

使用Show方法显示用户窗体。

运行代码时使用控件的值

有些属性可在运行时设置。

用户在对话框中为控件设置的值将在对话框关闭时丢失。

显示内置Word对话框

(这个要掌握,这个是内置的对话框,与Word关系紧密。

本主题包含下列信息和示例:

显示内置对话框

返回和更改对话框设置

检查对话框的关闭方式

显示内置对话框

可以显示内置对话框以获取用户输入的信息或使用VisualBasicforApplications控制MicrosoftWord。

Dialog对象的Show方法可显示并执行Word内置对话框中的任何操作。

若要访问特定的内置Word对话框,请指定具有Dialogs属性的WdWordDialog常量。

例如,下列宏指令显示“打开”对话框(wdDialogFileOpen)。

SubShowOpenDialog()

Dialogs(wdDialogFileOpen).Show

EndSub

选定文件并单击“确定”按钮后,会将文件打开(执行操作)。

下列示例显示“打印”对话框(wdDialogFilePrint)。

SubShowPrintDialog()

Dialogs(wdDialogFilePrint).Show

EndSub

设置DefaultTab属性可以访问Word对话框中的特定选项卡。

下列示例显示(“格式”菜单中)“边框和底纹”对话框中的“页面边框”选项卡。

SubShowBorderDialog()

WithDialogs(wdDialogFormatBordersAndShading)

.DefaultTab=wdDialogFormatBordersAndShadingTabPageBorder

'这个偷长,我都晕了。

.Show

EndWith

EndSub

Display方法显示对话框但不执行对话框的操作。

如果使用内置对话框提示用户并返回设置,则该方法很有用。

例如,下列宏指令显示(“工具”菜单中)“选项”对话框中的“用户信息”选项卡,然后返回并显示用户名称。

SubDisplayUserInfoDia

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1