Word VBA学习交流资料之二Word格式.docx
《Word VBA学习交流资料之二Word格式.docx》由会员分享,可在线阅读,更多相关《Word VBA学习交流资料之二Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
查看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”。
例如,下列示例将所选内容移动至Temp书签,并在书签之后插入文字。
SubMacro1()
Selection.GotoWhat:
=wdGotoBookmark,Name:
="
Temp"
Selection.MoveRightUnit:
=wdCharacter,Count:
=1
'
相当于选中后按一个键盘的右方向键
Selection.TypeTextText:
Newtext"
这个宏虽然可以完成任务,但是有一些缺点。
首先,如果文档中没有一个名为Temp的书签,该宏将导致出错。
其次,该宏可能不正确地移动所选内容。
修改这个宏,使其不再使用Selection对象,就可解决上述两个问题。
以下就是经修改后的宏:
SubMyMacro()
IfActiveDocument.Bookmarks.Exists("
)=TrueThen
endloc=ActiveDocument.Bookmarks("
).End
ActiveDocument.Range(Start:
=endloc,_
End:
=endloc).InsertAfter"
'
_ 就是续行的意思
EndIf
Exists方法用于检查是否存在名为Temp的书签。
如果找到该书签,则用End属性返回该书签结束字符的位置。
最后使用Range方法返回一个引用书签结束位置的Range对象,以使用InsertAfter方法插入文字。
有关定义Range对象的详细信息,请参阅处理Range对象。
使用With…EndWith
可使用With…EndWith结构简化引用相同对象的宏指令。
例如,在文档顶部添加标题时,将录制下面的宏。
Selection.HomeKeyUnit:
=wdStory
Title"
Selection.ParagraphAlignment.Alignment=wdAlignParagraphCenter
每个指令都使用Selection属性返回一个Selection对象。
可以简化这个宏,这样只需使用一次Selection属性。
WithSelection
.HomeKeyUnit:
.TypeTextText:
.ParagraphAlignment.Alignment=wdAlignParagraphCenter
上面那句是原帮助中的,但肯定是笔误!
微软没看出?
!
.ParagraphFormat.Alignment=wdAlignParagraphCenter
EndWith
不使用Selection对象也可以完成相同的任务。
下面的宏在活动文档的开头使用Range对象来完成相同的任务。
WithActiveDocument.Range(Start:
=0,End:
=0)
.InsertAfter"
'
删除不必要的属性
如果录制了一个关于在对话框中选择选项的宏,即使只更改一个或两个选项,宏录制器也会记录该对话框中的所有选项的设置。
如果不希望更改所有的选项,可从录制的宏中删除不必要的属性。
下面录制的宏包含“段落”对话框的一些选项(单击“格式”菜单可显示该对话框的所有信息)。
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
但是,如果只需更改段前和段后间距,可将宏更改为:
.SpaceBefore=6
.SpaceAfter=6
因为只设置了较少的属性,所以简化后的宏运行得更快。
运行结果只更改选定段落的段前和段后的间距,所有其他设置都没有改变。
(注意:
如果你是一个喜欢乱动的人,还是要上面吧,但他的速度肯定没有下面的快,但他的适合环境更大.更所谓"
忠"
"
孝"
难两全啊^-^)
删除不必要的参数
当宏录制器记录一个方法时,会包含所有参数的值。
打开名为Test.doc的文档时,录制了下面的宏。
所得到的宏包含Open方法的所有参数。
Documents.OpenFileName:
C:
\MyDocuments\Test.doc"
_
ConfirmConversions:
=False,ReadOnly:
=False,_
AddToRecentFiles:
=False,PasswordDocument:
PasswordTemplate:
Revert:
WritePasswordDocument:
WritePasswordTemplate:
Format:
=wdOpenFormatAuto
可以从录制的宏中删除不需要的参数。
例如,可以删除所有设置为空字符串的参数(如WritePasswordDocument:
),如下所示。
=False,_
ReadOnly:
=False,AddToRecentFiles:
Revert:
=False,Format:
三、自动运行的宏
通过为一个宏赋予某个特殊的名称,就可在执行某项操作(例如启动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
可添加指令或删除现有的ActiveDocument.Save指令。
之后在运行“FileSave”命令时,新的FileSave宏将取代word命令。
若要恢复“FileSave”原有的功能,需重新命名新的FileSave宏或将之删除。
说明:
也可以创建与Word命令同名的代码模块(例如FileSave)并包含名为Main的子程序,以此替换Word命令。
五、将文本插入文档
使用InsertAfter或InsertBefore方法在Selection或Range对象之前或之后插入文字。
下列示例在活动文档的末尾插入文字。
SubInsertTextAtEndOfDocument()
ActiveDocument.Content.InsertAfterText:
Theend."
下列示例在所选内容之前插入文字。
SubAddTextBeforeSelection()
Selection.InsertBeforeText:
newtext"
Range对象或Selection对象在使用了InsertBefore或InsertAfter方法之后,会扩展并包含新的文本。
使用Collapse方法可以将Selection或Range折叠到开始或结束位置。
六、选定文档中的文本
可使用Select方法选定文档中的对象。
Select方法可用于多种对象,例如Bookmark、Field、Range和Table对象。
下列示例选定活动文档中的第一个表格。
SubSelectTable()
ActiveDocument.Tables
(1).Select
下列示例选定活动文档中的第一个域。
SubSelectField()
ActiveDocument.Fields
(1).Select
下列示例选定活动文档中的前四个段落。
Range方法用于创建一个引用前四个段落的Range对象,然后将Select方法应用于Range对象。
SubSelectRange()
DimrngParagraphsAsRange
SetrngParagraphs=ActiveDocument.Range(_
Start:
=ActiveDocument.Paragraphs
(1).Range.Start,_
=ActiveDocument.Paragraphs(4).Range.End)
rngParagraphs.Select
选定文档中的文本:
我觉得用处不大,原因就是为什么要选中呢?
能操作就直接操作,不能的话,就选中吧(他可以说是没办法的办法).
七、编辑文字
本主题包含与下列任务相关的VisualBasic示例:
∙确定文本是否被选定
∙折叠选定内容或区域
∙扩展选定内容或区域
∙重新定义Range对象
∙更改文本
有关其他编辑任务的信息和示例,请参阅下列主题:
从文档返回文本
选定文档中的文本
将文本插入文档
修改文档的某一部分
确定文本是否被选定
Selection对象的Type属性返回所选内容类型的信息。
如果所选内容为插入点,则下列示例显示一条消息"
NothingisSelected"
。
没选中任何问题
SubIsTextSelected()
IfSelection.Type=wdSelectionIPThenMsgBox"
Nothingisselected"
折叠所选内容或区域
使用Collapse方法可将Selection或Range对象折叠到开始或结束点的位置。
下列示例在所选内容的开头将所选内容折叠为一个插入点。
SubCollapseToBeginning()
Selection.CollapseDirection:
=wdCollapseStart
=wdCollapseEnd
这个是标准的折叠的程序,以后可能会用到的噢!
下列示例将区域折叠至其结束点(在第一个单词之后),并添加新文本。
SubCollapseToEnd()
DimrngWordsAsRange
SetrngWords=ActiveDocument.Words
(1)'
设置第一个单词为区域rngWords
WithrngWords
.CollapseDirection:
=wdCollapseEnd'
折叠到最后,区域与可以折叠的噢!
.Text="
(Thisisatest.)"
在折叠的最后加入这些文字
扩展所选内容或区域
下列示例使用MoveEnd方法扩展所选内容的结尾以包含三个附加的单词(总共是4个!
)。
MoveLeft、MoveRight、MoveUp和MoveDown方法也可以用于扩展Selection对象。
SubExtendSelection()
Selection.MoveEndUnit:
=wdWord,Count:
=3
下列示例使用MoveEnd方法扩展区域,以包含活动文档中的前三个段落。
SubExtendRange()
SetrngParagraphs=ActiveDocument.Paragraphs
(1).Range
rngParagraphs.MoveEndUnit:
=wdParagraph,Count:
=2
重新定义Range对象
使用SetRange方法可重新定义现有的Range对象。
更改文字
通过更改某一区域中的内容可更改现有的文字。
下列指令通过将Text属性设为“The”来更改活动文档中的第一个单词。
SubChangeText()
ActiveDocument.Words
(1).Text="
The"
也可以使用Delete方法删除现有文本,然后使用InsertAfter或InsertBefore方法插入新文本。
下列示例删除活动文档的第一段,并插入新文本。
SubDeleteText()
DimrngFirstParagraphAsRange
SetrngFirstParagraph=ActiveDocument.Paragraphs
(1).Range
WithrngFirstParagraph
.Delete
.InsertAfterText:
.InsertParagraphAfter
上面的这个例子我们通常不用,我们更喜欢用下面
SubDeleteText1()
rngFirstParagraph.Text="
&
Chr(13)
八、将格式应用于文本
∙将格式应用于选定内容
∙将格式应用于某一区域
∙插入文本并应用字符和段落格式
∙在12磅和无之间切换段前间距
∙切换加粗格式
∙将左边距增加0.5英寸
将格式应用于选定内容
下列示例使用Selection属性将字符和段落格式应用于选定文本。
使用Font属性获得字体格式的属性和方法,使用ParagraphFormat属性获得段落格式的属性和方法。
SubFormatSelection()
WithSelection.Font
.Name="
TimesNewRoman"
.Size=14
.AllCaps=True'
全部大写
.LeftIndent=InchesToPoints(0.5)'
左缩进0.5英寸
.Space1'
这是单倍行距的缩写
将格式应用于某