Word VBA学习交流资料之二.docx

上传人:b****7 文档编号:9526624 上传时间:2023-02-05 格式:DOCX 页数:28 大小:63.25KB
下载 相关 举报
Word VBA学习交流资料之二.docx_第1页
第1页 / 共28页
Word VBA学习交流资料之二.docx_第2页
第2页 / 共28页
Word VBA学习交流资料之二.docx_第3页
第3页 / 共28页
Word VBA学习交流资料之二.docx_第4页
第4页 / 共28页
Word VBA学习交流资料之二.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

Word VBA学习交流资料之二.docx

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

Word VBA学习交流资料之二.docx

WordVBA学习交流资料之二

WordVBA学习交流资料之二

感  想:

有感于国人的Word水平比较低,尤其是VBA这一块,本人想请大家一起学习VBA,在提高自身的能力同时帮助需要帮助的人。

感谢:

绿叶的建群之功,也感谢you兄的热烈支持,更感谢大家的大力支持!

学前必备:

WordVBA帮助(2003或别的都行,大体相当)(没有也没有关系,在这里,大多看到的就是复制自“帮助”的。

可选工具:

金山词霸(对E文不太懂的人,尤其重要)

语法工具:

共享区的“VBA一串通”

学习方法:

“不求甚解”(一开始,不太懂,没关系,坚持下去就懂了。

学习步骤:

看到例子时,复制到VBE编辑器中运行一次,看一下结果(最好按F8,一步一步地看)

必要指出:

是“互学”,错误或不妥之处难免!

因我也是一边看帮助,一边写。

开始之前:

高唱国歌(最好能喊:

自强不息!

―――――――――――――――

Start:

一、通过录制宏生成代码

如果无法确定要使用的VisualBasic方法或属性,可打开宏录制器并进行手动操作。

宏录制器会将操作译成VisualBasic代码。

录制操作完成后,可根据需要修改代码。

例如,如果无法确定实现段落缩进的属性或方法,可执行下列操作:

1.在“工具”菜单上,指向“宏”,然后单击“录制新宏”。

2.如果需要,可更改默认的宏名称,然后单击“确定”启动录制器。

3.在“格式”菜单上,选定“段落”。

4.更改段落左缩进的值,然后单击“确定”。

5.单击“停止录制”工具栏上的“停止录制”按钮。

6.在“工具”菜单上,指向“宏”,然后单击“宏”。

7.从步骤2中选择宏的名称,然后单击“编辑”按钮。

查看VisualBasic代码来确定对应于段落左缩进的属性(LeftIndent属性)。

将插入点置于LeftIndent之中,并按F1或单击“帮助”按钮。

在帮助主题中,可以查看示例以及支持LeftIndent属性的对象(单击“应用于”)。

(从上面可以看出,录制宏是我们认识未知对象的很好方法之一,同时,也知道我为什么要大家装“金山词霸”的原因!

如果你这个单词不认识,你怎么知道他是“左缩进”?

当然,也有方法:

就是把这个值设为一个比较特殊的值,再打特殊值所对应的属性)

说明

录制的宏使用Selection属性返回Selection对象。

例如,下列指令将所选段落缩进0.5英寸。

SubIndentParagraph()

Selection.ParagraphFormat.LeftIndent=InchesToPoints(0.5)

EndSub

您也可以修改录制的宏并与Range对象一起使用。

(我们在日常的使用中经常注意到:

在使用“本机上的模板”是的向导就大量使用了Selection对象,而不是Range对象!

难道说微软有更新层次的考虑?

我想可能是Selection对象更稳定,跨版本能力更强吧!

二、修改录制的VisualBasic宏

宏录制器是查找所需的VisualBasic方法和属性的非常方便的工具。

如果不知道使用何种属性或方法,可打开宏录制器,手动执行操作。

宏录制器会将操作译为VisualBasic代码。

但录制宏具有一些限制条件。

您不能录制下列内容:

条件分支

变量指定

循环结构

自定义用户窗体

出错处理

用鼠标选定的文字(必须使用组合键)

若要增强宏的功能,可能需要修改录制到模块中的代码。

删除Selection属性

使用宏录制器创建的宏取决于所选内容。

在大多数录制的宏指令的开头,可以看到“Selection”。

录制的宏使用Selection属性返回Selection对象。

例如,下列示例将所选内容移动至Temp书签,并在书签之后插入文字。

SubMacro1()

Selection.GotoWhat:

=wdGotoBookmark,Name:

="Temp"

Selection.MoveRightUnit:

=wdCharacter,Count:

=1

'相当于选中后按一个键盘的右方向键

Selection.TypeTextText:

="Newtext"

EndSub

这个宏虽然可以完成任务,但是有一些缺点。

首先,如果文档中没有一个名为Temp的书签,该宏将导致出错。

其次,该宏可能不正确地移动所选内容。

修改这个宏,使其不再使用Selection对象,就可解决上述两个问题。

以下就是经修改后的宏:

SubMyMacro()

IfActiveDocument.Bookmarks.Exists("Temp")=TrueThen

endloc=ActiveDocument.Bookmarks("Temp").End

ActiveDocument.Range(Start:

=endloc,_

End:

=endloc).InsertAfter"Newtext"

'_ 就是续行的意思

EndIf

EndSub

Exists方法用于检查是否存在名为Temp的书签。

如果找到该书签,则用End属性返回该书签结束字符的位置。

最后使用Range方法返回一个引用书签结束位置的Range对象,以使用InsertAfter方法插入文字。

有关定义Range对象的详细信息,请参阅处理Range对象。

使用With…EndWith

可使用With…EndWith结构简化引用相同对象的宏指令。

例如,在文档顶部添加标题时,将录制下面的宏。

SubMacro1()

Selection.HomeKeyUnit:

=wdStory

Selection.TypeTextText:

="Title"

Selection.ParagraphAlignment.Alignment=wdAlignParagraphCenter

EndSub

每个指令都使用Selection属性返回一个Selection对象。

可以简化这个宏,这样只需使用一次Selection属性。

SubMyMacro()

WithSelection

.HomeKeyUnit:

=wdStory

.TypeTextText:

="Title"

'.ParagraphAlignment.Alignment=wdAlignParagraphCenter

'上面那句是原帮助中的,但肯定是笔误!

微软没看出?

!

.ParagraphFormat.Alignment=wdAlignParagraphCenter

EndWith

EndSub

不使用Selection对象也可以完成相同的任务。

下面的宏在活动文档的开头使用Range对象来完成相同的任务。

SubMyMacro()

WithActiveDocument.Range(Start:

=0,End:

=0)

.InsertAfter"Title"

'.ParagraphAlignment.Alignment=wdAlignParagraphCenter

'上面那句是原帮助中的,但肯定是笔误!

微软没看出?

!

.ParagraphFormat.Alignment=wdAlignParagraphCenter

EndWith

EndSub

删除不必要的属性

如果录制了一个关于在对话框中选择选项的宏,即使只更改一个或两个选项,宏录制器也会记录该对话框中的所有选项的设置。

如果不希望更改所有的选项,可从录制的宏中删除不必要的属性。

下面录制的宏包含“段落”对话框的一些选项(单击“格式”菜单可显示该对话框的所有信息)。

SubMacro1()

WithSelection.ParagraphFormat

.LeftIndent=InchesToPoints(0)'左缩进0英寸

.RightIndent=InchesToPoints(0)'右缩进0英寸

.SpaceBefore=6'段前距6磅

.SpaceAfter=6'段后距6磅,下面不写了!

.LineSpacingRule=0

.Alignment=wdAlignParagraphLeft

.WidowControl=True

.KeepWithNext=False

.KeepTogether=False

.PageBreakBefore=False

.NoLineNumber=False

.Hyphenation=True

.FirstLineIndent=InchesToPoints(0)

.OutlineLevel=10

EndWith

EndSub

但是,如果只需更改段前和段后间距,可将宏更改为:

SubMyMacro()

WithSelection.ParagraphFormat

.SpaceBefore=6

.SpaceAfter=6

EndWith

EndSub

因为只设置了较少的属性,所以简化后的宏运行得更快。

运行结果只更改选定段落的段前和段后的间距,所有其他设置都没有改变。

(注意:

如果你是一个喜欢乱动的人,还是要上面吧,但他的速度肯定没有下面的快,但他的适合环境更大.更所谓"忠""孝"难两全啊^-^)

删除不必要的参数

当宏录制器记录一个方法时,会包含所有参数的值。

打开名为Test.doc的文档时,录制了下面的宏。

所得到的宏包含Open方法的所有参数。

SubMacro1()

Documents.OpenFileName:

="C:

\MyDocuments\Test.doc",_

ConfirmConversions:

=False,ReadOnly:

=False,_

AddToRecentFiles:

=False,PasswordDocument:

="",_

PasswordTemplate:

="",Revert:

=False,_

WritePasswordDocument:

="",_

WritePasswordTemplate:

="",Format:

=wdOpenFormatAuto

EndSub

可以从录制的宏中删除不需要的参数。

例如,可以删除所有设置为空字符串的参数(如WritePasswordDocument:

=""),如下所示。

SubMyMacro()

Documents.OpenFileName:

="C:

\MyDocuments\Test.doc",_

ConfirmConversions:

=False,_

ReadOnly:

=False,AddToRecentFiles:

=False,_

Revert:

=False,Format:

=wdOpenFormatAuto

EndSub

三、自动运行的宏

通过为一个宏赋予某个特殊的名称,就可在执行某项操作(例如启动Word或打开文档)时自动运行宏。

Word将下列名称识别为自动宏,或称“auto”宏。

宏名

运行条件

AutoExec

启动Word或加载全局模板时

AutoNew

每次新建文档时

AutoOpen

每次打开已有文档时

AutoClose

每次关闭文档时

AutoExit

退出Word或卸载全局模板时

当以下条件之一为真时,将识别代码模块中的自动宏。

∙模块在自动宏(如AutoExec)之后命名,并且包含一个名为“Main”的过程。

∙任何模块中的过程在自动宏之后命名。

与其他宏一样,自动宏也可以保存于Normal模板、其他模板或文档中。

要让自动宏运行,它必须位于活动文档的Normal模板中,或活动文档选用的模板中。

唯一例外的是AutoExec宏,它只有存储于以下位置时才可自动运行:

Normal模板、通过“模板和加载项”对话框全局加载的模板、或由“Startup”文件夹指定的文件夹中的全局模板。

在命名冲突的情况下(多个自动宏名相同),Word将运行上下文中最近的自动宏。

例如,如果同时在文档及其附加的模板中创建了AutoClose宏,则仅执行文档中的自动宏。

如果在Normal模板中创建了AutoNew宏,只有当文档或其附加模板中没有名为AutoNew的宏时,该自动宏才能运行。

(笔者注:

简称"就近原则"!

注释  按住Shift可以终止自动宏的运行。

例如,基于包含AutoNew宏的模板新建文档时,按住Shift可终止AutoNew宏的运行。

方法是:

按住Shift,单击(“文件”菜单)“新建”对话框中的“确定”按钮,并在显示新文档前持续按住Shift。

如果运行一个宏时有可能触发自动宏,(这种情况,我没遇过!

)可用下列指令终止自动宏的运行:

WordBasic.DisableAutoMacros

四、修改Word命令

大多数Word命令都可通过转换为宏的方式对其进行修改。

例如,可修改“文件”菜单上的“打开”命令,使其不再显示Word文档文件列表(扩展名为.doc的文件),而显示当前文件夹中的所有文件。

若要在“宏”对话框中显示内置Word命令列表,可在“宏的位置”框中选定“Word命令”。

显示的命令列表中包含所有的菜单命令、工具栏命令或快捷键命令。

菜单命令名称以相关的菜单名称开头。

例如,“文件”菜单中的“保存”命令显示为“FileSave”。

方法是工具/宏/宏

通过将一个宏命名为与Word命令相同的名称,就可用宏替代Word命令。

例如,如果创建一个名为“FileSave”的宏,当选择“文件”菜单上的“保存”命令、单击“保存”工具栏按钮,或按“保存文件”快捷键时,Word将运行该宏。

本示例介绍了修改FileSave命令的步骤。

1.在“工具”菜单上,指向“宏”,然后单击“宏”。

2.在“宏的位置”框中,选择“Word命令”。

3.在“宏名”框中,选择“FileSave”。

4.在“宏的位置”框中选择一个模板或文档以保存该宏。

例如,选择Normal.dot(全局模板)可生成一个共用宏(即修改所有文档的“FileSave”命令)。

5.单击“创建”按钮。

FileSave宏显示如下:

SubFileSave()

'

'FileSaveMacro

'Savestheactivedocumentortemplate

'

ActiveDocument.Save

EndSub

可添加指令或删除现有的ActiveDocument.Save指令。

之后在运行“FileSave”命令时,新的FileSave宏将取代word命令。

若要恢复“FileSave”原有的功能,需重新命名新的FileSave宏或将之删除。

说明:

也可以创建与Word命令同名的代码模块(例如FileSave)并包含名为Main的子程序,以此替换Word命令。

五、将文本插入文档

使用InsertAfter或InsertBefore方法在Selection或Range对象之前或之后插入文字。

下列示例在活动文档的末尾插入文字。

SubInsertTextAtEndOfDocument()

ActiveDocument.Content.InsertAfterText:

="Theend."

EndSub

下列示例在所选内容之前插入文字。

SubAddTextBeforeSelection()

Selection.InsertBeforeText:

="newtext"

EndSub

Range对象或Selection对象在使用了InsertBefore或InsertAfter方法之后,会扩展并包含新的文本。

使用Collapse方法可以将Selection或Range折叠到开始或结束位置。

六、选定文档中的文本

可使用Select方法选定文档中的对象。

Select方法可用于多种对象,例如Bookmark、Field、Range和Table对象。

下列示例选定活动文档中的第一个表格。

SubSelectTable()

ActiveDocument.Tables

(1).Select

EndSub

下列示例选定活动文档中的第一个域。

SubSelectField()

ActiveDocument.Fields

(1).Select

EndSub

下列示例选定活动文档中的前四个段落。

Range方法用于创建一个引用前四个段落的Range对象,然后将Select方法应用于Range对象。

SubSelectRange()

DimrngParagraphsAsRange

SetrngParagraphs=ActiveDocument.Range(_

Start:

=ActiveDocument.Paragraphs

(1).Range.Start,_

End:

=ActiveDocument.Paragraphs(4).Range.End)

rngParagraphs.Select

EndSub

'选定文档中的文本:

我觉得用处不大,原因就是为什么要选中呢?

能操作就直接操作,不能的话,就选中吧(他可以说是没办法的办法).

七、编辑文字

本主题包含与下列任务相关的VisualBasic示例:

∙确定文本是否被选定

∙折叠选定内容或区域

∙扩展选定内容或区域

∙重新定义Range对象

∙更改文本

有关其他编辑任务的信息和示例,请参阅下列主题:

从文档返回文本

选定文档中的文本

将文本插入文档

修改文档的某一部分

确定文本是否被选定

Selection对象的Type属性返回所选内容类型的信息。

'如果所选内容为插入点,则下列示例显示一条消息"NothingisSelected"。

没选中任何问题

SubIsTextSelected()

IfSelection.Type=wdSelectionIPThenMsgBox"Nothingisselected"

EndSub

折叠所选内容或区域

使用Collapse方法可将Selection或Range对象折叠到开始或结束点的位置。

下列示例在所选内容的开头将所选内容折叠为一个插入点。

SubCollapseToBeginning()

Selection.CollapseDirection:

=wdCollapseStart

'Selection.CollapseDirection:

=wdCollapseEnd

EndSub

'这个是标准的折叠的程序,以后可能会用到的噢!

下列示例将区域折叠至其结束点(在第一个单词之后),并添加新文本。

SubCollapseToEnd()

DimrngWordsAsRange

SetrngWords=ActiveDocument.Words

(1)'设置第一个单词为区域rngWords

WithrngWords

.CollapseDirection:

=wdCollapseEnd'折叠到最后,区域与可以折叠的噢!

.Text="(Thisisatest.)"'在折叠的最后加入这些文字

EndWith

EndSub

扩展所选内容或区域

下列示例使用MoveEnd方法扩展所选内容的结尾以包含三个附加的单词(总共是4个!

)。

MoveLeft、MoveRight、MoveUp和MoveDown方法也可以用于扩展Selection对象。

SubExtendSelection()

Selection.MoveEndUnit:

=wdWord,Count:

=3

EndSub

下列示例使用MoveEnd方法扩展区域,以包含活动文档中的前三个段落。

SubExtendRange()

DimrngParagraphsAsRange

SetrngParagraphs=ActiveDocument.Paragraphs

(1).Range

rngParagraphs.MoveEndUnit:

=wdParagraph,Count:

=2

EndSub

重新定义Range对象

使用SetRange方法可重新定义现有的Range对象。

更改文字

通过更改某一区域中的内容可更改现有的文字。

下列指令通过将Text属性设为“The”来更改活动文档中的第一个单词。

SubChangeText()

ActiveDocument.Words

(1).Text="The"

EndSub

也可以使用Delete方法删除现有文本,然后使用InsertAfter或InsertBefore方法插入新文本。

下列示例删除活动文档的第一段,并插入新文本。

SubDeleteText()

DimrngFirstParagraphAsRange

SetrngFirstParagraph=ActiveDocument.Paragraphs

(1).Range

WithrngFirstParagraph

.Delete

.InsertAfterText:

="Newtext"

.InsertParagraphAfter

EndWith

EndSub

'上面的这个例子我们通常不用,我们更喜欢用下面

SubDeleteText1()

DimrngFirstParagraphAsRange

SetrngFirstParagraph=ActiveDocument.Paragraphs

(1).Range

rngFirstParagraph.Text="Newtext"&Chr(13)

EndSub

八、将格式应用于文本

本主题包含与下列任务相关的VisualBasic示例:

∙将格式应用于选定内容

∙将格式应用于某一区域

∙插入文本并应用字符和段落格式

∙在12磅和无之间切换段前间距

∙切换加粗格式

∙将左边距增加0.5英寸

将格式应用于选定内容

下列示例使用Selection属性将字符和段落格式应用于选定文本。

使用Font属性获得字体格式的属性和方法,使用ParagraphFormat属性获得段落格式的属性和方法。

SubFormatSelection()

WithSelection.Font

.Name="TimesNewRoman"

.Size=14

.AllCaps=True'全部大写

EndWith

WithSelection.ParagraphFormat

.LeftIndent=InchesToPoints(0.5)'左缩进0.5英寸

.Space1'这是单倍行距的缩写

EndWith

EndSub

将格式应用于某

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

当前位置:首页 > 高等教育 > 文学

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

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