Word-VBA-学习交流资料(全)_第1页
Word-VBA-学习交流资料(全)_第2页
Word-VBA-学习交流资料(全)_第3页
Word-VBA-学习交流资料(全)_第4页
Word-VBA-学习交流资料(全)_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./WordVBA学习交流资料目录一、对象模型打开WordVBA帮助,首先看到的是"Word的对象模型"〔如下所示图表SEQ图表\*ARABIC1知识点:知道Application对象〔Word应该程序的总对象、Doctuments对象〔文档集对象、Paragraphs对象〔段落集、Selection〔选中区域对象、Tables〔表格对象、Sections〔节,即Word的第一节对象、Headers〔页眉对象.二、新增功能〔略原因:我们的初衷大多是从"零"开始,最基础的我们都不知道,何来"新增"啊?但是,以后学到相关的知识时,会跳到这里,学一些新增的"对象"、"方法"、"事件"、"属性"等.三、编程概念对象是VisualBasic的结构基础,在VisualBasic中进行的所有操作几乎都与修改对象有关.MicrosoftWord的任何元素,如文档、表格、段落、书签、域等,都可用VisualBasic中的对象来表示.什么是对象和集合?对象代表一个Word元素,如文档、段落、书签或单独的字符.集合也是一个对象,该对象包含多个其他对象,通常这些对象属于相同的类型;例如,一个集合对象中可包含文档中的所有书签对象.通过使用属性和方法,可以修改单独的的对象,也可修改整个的对象集合.例如:ActiveDocument.Paragraphs<2>.Range.Characters<1>.Font.Color=wdColorRed在Word的VBA中,大多数对象都是通过Application来访问,但有几个可以直接访问:如activedocumnet、documents等,当然通过application对象也行,但无疑后者更简略.什么是属性?属性是对象的一种特性或该对象行为的一个方面.例如,文档属性包含其名称、内容、保存状态以及是否启用修订.若要更改一个对象的特征,可以修改其属性值.若要设置属性的值,可在对象的后面紧接一个句号、属性名称、一个等号及新的属性值.下列示例在名为"MyDoc.doc"的文档中启用修订.SubTrackChanges<>Documents<"Sales.doc">.TrackRevisions=TrueEndSub在本例中,Documents引用由打开的文档〔注意是对打开后文档的操作构成的集合,而"MyDoc.doc"标识集合中单独的文档.并设置该文档的TrackRevisions属性.不能设置某些属性.属性的"帮助"主题中会标明可以设置该属性〔可读写,或只能读取该属性〔只读.通过返回对象的一个属性值,可以获取有关该对象的信息.下列示例返回活动文档的名称.SubGetDocumentName<>DimstrDocNameAsStringstrDocName=ActiveDocument.NameMsgBoxstrDocNameEndSub〔这个例子输出的没有路径,只有名字.若带路径的话,把strDocName=ActiveDocument.Name改为:strDocName=ActiveDocument.Path&ActiveDocument.Name在本例中,ActiveDocument引用Word活动窗口中的文档.该文档的名称赋给了strDocName变量.说明:每个属性的"帮助"主题表明可以设置该属性〔可读写,只能读取该属性〔只读,或只能写入该属性〔只写.此外"VisualBasic编辑器"中的"对象浏览器"在浏览窗口的底部显示所选属性的读写状态.什么是方法?方法是对象可以执行的动作.例如,只要文档可以打印,Document对象就具有PrintOut方法.方法通常带有参数,以限定执行动作的方式.下列示例打印活动文档的前三页.SubPrintThreePages<>ActiveDocument.PrintOutRangeEndSub在大多数情况下,方法是动作,而属性是性质.使用方法将导致发生对象的某些事件<所以,有人说:"方法是集成了的事件">,而使用属性则会返回对象的信息,或引起对象的某个性质的改变.返回一个对象可通过返回集合中单独的对象的方式来返回大多数对象.例如Documents集合包含打开的Word文档.可使用〔位于Word对象结构顶层的Application对象的Documents属性返回Documents集合.在访问集合之后,可以通过在括号中使用索引序号〔与处理数组的方式相似返回单独的对象.索引序号通常是一个数值或名称.详细内容,请参阅返回集合中的对象.下列示例使用Documents属性访问Documents集合.索引序号用于返回Documents集合中的第一篇文档.然后将Close方法应用于Document对象,关闭Documents集合中的第一篇文档.SubCloseDocument<>Documents<1>.CloseEndSub'这个可能以后大多不用,原因就是索引序号在变,当打开、关闭一个文档时,对应的序号就增加或减少了数字,所以不好把握,大多不用.下列示例使用名称〔指定为一个字符串来识别Documents集合中的Document对象.SubCloseSalesDoc<>Documents<"Sales.doc">.CloseEndSub'这个常用,让某个指定的文档关闭.集合对象通常具有可用于修改整个对象集合的方法和属性.Documents对象具有Save方法,可用于保存集合中的所有文档.下列示例通过使用Save方法保存所有打开的文档.SubSaveAllOpenDocuments<>Documents.SaveEndSub'所有的文档保存,相当于按住Shift再点击文件下的全部保存命令.Document对象也可使用Save方法保存单独的文档.下列示例保存名为Sales.doc的文档.SubSaveSalesDoc<>Documents<"Sales.doc">.SaveEndSub'对指定的文档保存.若要返回一个处于Word对象结构底层的对象,就必须使用可返回对象的属性和方法,"深入"到该对象.若要查看该过程的执行,请打开"VisualBasic编辑器",在"视图"菜单上单击"对象浏览器".单击左侧"类"列表中的Application.然后单击右侧"成员"列表中的ActiveDocument."对象浏览器"底部会显示文字,表明ActiveDocument是只读的,该属性返回Document对象.然后单击"对象浏览器"底部的Document,则会在"类"列表中自动选定Document对象,并将在"成员"列表中显示Document对象的成员.滚动成员列表,找到Close,单击Close方法."对象浏览器"窗口底部会显示文字,说明该方法的语法.有关该方法的详细内容,请按F1〔作者注:不把F1磨平,VBA很难真正掌握^-^或单击"帮助"按钮,以跳转到Close方法的"帮助"主题.根据这些信息可编写下列指令,以关闭活动文档.SubCloseDocSaveChanges<>ActiveDocument.CloseSaveChanges:=wdSaveChangesEndSub'关闭并保存改变.这里显然,保存为方法,后面有参数下列示例将活动文档窗口最大化.SubMaximizeDocumentWindow<>ActiveDocument.ActiveWindow.WindowState=wdWindowStateMaximizeEndSub'这个是赋最大化值属性给活动窗口ActiveWindow属性返回一个Window对象,该对象代表活动窗口.将WindowState属性设为最大常量〔wdWindowStateMaximize.下列示例新建一篇文档,并显示"另存为"对话框,这样即可为文档提供一个名称.SubCreateSaveNewDocument<>EndSub'这个有意思,添加新文档并保存,一步,利害吧'如果不是看帮助,你敢这么用吗?方法.方法Documents属性返回Documents集合.Add方法新建一篇文档,并返回一个Document对象.然后对Document对象应用Save方法.如上所示,可以使用方法或属性来访问下层对象.也就是说,在对象结构中,将方法或属性应用于某个对象的上一级对象,可返回该下级对象.返回所需对象之后,就可以应用该对象的方法并控制其属性.要查看对象结构分层的情况,请参阅MicrosoftWord对象.获得有关对象、方法和属性的"帮助"信息在熟悉Word对象模型之前,可以利用一些工具来深入了解对象结构.自动成员列表.〔重要在"VisualBasic编辑器"中,在对象后面键入句号<.>后,即显示可用的属性和方法的列表.例如,如果键入"Application.",就会显示Application对象的方法和属性的下拉列表.帮助.也可以使用"帮助"找到可应用于对象的属性和方法."帮助"中的每个对象主题都包含一个"参阅"跳转,以显示该对象的属性和方法列表.在"对象浏览器"或某一模块中按F1,可跳转到相应的"帮助"主题.MicrosoftWord对象.该主题阐明在分级结构中Word对象的排列方式.在结构图中单击一个对象,可显示相应的"帮助"主题.对象浏览器."VisualBasic编辑器"中的"对象浏览器"显示Word对象的成员〔属性和方法.实例:打开Word后,按Alt+F11,出现VBE窗口,双击右边的Thisdocument〔当然,放到底下的模块中任一个也行,输入如下内容:Subautoexec<>Application.Caption="我爱我家!"EndSub这时,关闭Word,再打开Word.你的标题就有"×××.doc—我爱我家!"了!图表SEQ图表\*ARABIC2当然,也可以进一步做成这样:Subautoexec<>Dimaa=MsgBox<"我家我家",vbYesNo,"这是一个试验">Ifa<>6ThenApplication.QuitEndIfEndSub'功能就是打开Word时,显示此对话框,如果点了"是"就不作处理即打开Word,否则,退出Quit.也可以写成这样:Subautoexec<>Dimaa=InputBox<"你的姓名","防君子,不防小人!">Ifa<>"小小"ThenApplication.QuitEndIfEndSub'功能就是打开Word时,显示此对话框,如果输入的不是小小,就打不开.MsgBox函数参考:在对话框中显示消息,等待用户单击按钮,并返回一个Integer告诉用户单击哪一个按钮.语法MsgBox<prompt[,buttons][,title][,helpfile,context]>MsgBox函数的语法具有以下几个命名参数:部分描述Prompt必需的.字符串表达式,作为显示在对话框中的消息.prompt的最大长度大约为1024个字符,由所用字符的宽度决定.如果prompt的内容超过一行,则可以在每一行之间用回车符<Chr<13>>、换行符<Chr<10>>或是回车与换行符的组合<Chr<13>&Chr<10>>将各行分隔开来.Buttons可选的.数值表达式是值的总和,指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等.如果省略,则buttons的缺省值为0.Title可选的.在对话框标题栏中显示的字符串表达式.如果省略title,则将应用程序名放在标题栏中.Helpfile可选的.字符串表达式,识别用来向对话框提供上下文相关帮助的帮助文件.如果提供了helpfile,则也必须提供context.Context可选的.数值表达式,由帮助文件的作者指定给适当的帮助主题的帮助上下文编号.如果提供了context,则也必须提供helpfile.设置值buttons参数有下列设置值:常数 值 描述vbOKOnly 0 只显示OK按钮.VbOKCancel 1 显示OK及Cancel按钮.VbAbortRetryIgnore 2 显示Abort、Retry及Ignore按钮.VbYesNoCancel 3 显示Yes、No及Cancel按钮.VbYesNo 4 显示Yes及No按钮.VbRetryCancel 5 显示Retry及Cancel按钮.VbCritical 16 显示CriticalMessage图标.VbQuestion 32 显示WarningQuery图标.VbExclamation 48 显示WarningMessage图标.VbInformation 64 显示InformationMessage图标.vbDefaultButton 10 第一个按钮是缺省值.vbDefaultButton 2256 第二个按钮是缺省值.vbDefaultButton 3512 第三个按钮是缺省值.vbDefaultButton 4768 第四个按钮是缺省值.vbApplicationModal 0应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作.vbSystemModal4096系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作.vbMsgBoxHelpButton16384将Help按钮添加到消息框VbMsgBoxSetForeground65536指定消息框窗口作为前景窗口vbMsgBoxRight524288文本为右对齐vbMsgBoxRtlReading1048576指定文本应为在希伯来和阿拉伯语系统中的从右到左显示第一组值<0–5>描述了对话框中显示的按钮的类型与数目;第二组值<16,32,48,64>描述了图标的样式;第三组值<0,256,512>说明哪一个按钮是缺省值;而第四组值<0,4096>则决定消息框的强制返回性.将这些数字相加以生成buttons参数值的时候,只能由每组值取用一个数字.注意这些常数都是VisualBasicforApplications<VBA>指定的.结果,可以在程序代码中到处使用这些常数名称,而不必使用实际数值.返回值常数值描述vbOK1OKvbCancel2CancelvbAbort3AbortvbRetry4RetryvbIgnore5IgnorevbYes6YesvbNo7No说明如果对话框显示Cancel按钮,则按下ESC键与单击Cancel按钮的效果相同.如果对话框中有Help按钮,则对话框中提供有上下文相关的帮助.但是,直到其它按钮中有一个被单击之前,都不会返回任何值.注意如果还要指定第一个命名参数以外的参数,则必须在表达式中使用MsgBox.为了省略某些位置参数,必须加入相应的逗号分界符.一、通过录制宏生成代码如果无法确定要使用的VisualBasic方法或属性,可打开宏录制器并进行手动操作.宏录制器会将操作译成VisualBasic代码.录制操作完成后,可根据需要修改代码.例如,如果无法确定实现段落缩进的属性或方法,可执行下列操作:在"工具"菜单上,指向"宏",然后单击"录制新宏".如果需要,可更改默认的宏名称,然后单击"确定"启动录制器.在"格式"菜单上,选定"段落".更改段落左缩进的值,然后单击"确定".单击"停止录制"工具栏上的"停止录制"按钮.在"工具"菜单上,指向"宏",然后单击"宏".从步骤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">=TrueThenendloc=ActiveDocument.Bookmarks<"Temp">.EndActiveDocument.Range<Start:=endloc,_End:=endloc>.InsertAfter"Newtext"'_就是续行的意思EndIfEndSubExists方法用于检查是否存在名为Temp的书签.如果找到该书签,则用End属性返回该书签结束字符的位置.最后使用Range方法返回一个引用书签结束位置的Range对象,以使用InsertAfter方法插入文字.有关定义Range对象的详细信息,请参阅处理Range对象.使用With…EndWith可使用With…EndWith结构简化引用相同对象的宏指令.例如,在文档顶部添加标题时,将录制下面的宏.SubMacro1<>Selection.HomeKeyUnit:=wdStorySelection.TypeTextText:="Title"Selection.ParagraphAlignment.Alignment=wdAlignParagraphCenterEndSub每个指令都使用Selection属性返回一个Selection对象.可以简化这个宏,这样只需使用一次Selection属性.SubMyMacro<>WithSelection.HomeKeyUnit:=wdStory.TypeTextText:="Title"'.ParagraphAlignment.Alignment=wdAlignParagraphCenter'上面那句是原帮助中的,但肯定是笔误!微软没看出?!.ParagraphFormat.Alignment=wdAlignParagraphCenterEndWithEndSub不使用Selection对象也可以完成相同的任务.下面的宏在活动文档的开头使用Range对象来完成相同的任务.SubMyMacro<>WithActiveDocument.Range<Start:=0,End:=0>.InsertAfter"Title"'.ParagraphAlignment.Alignment=wdAlignParagraphCenter'上面那句是原帮助中的,但肯定是笔误!微软没看出?!.ParagraphFormat.Alignment=wdAlignParagraphCenterEndWithEndSub删除不必要的属性如果录制了一个关于在对话框中选择选项的宏,即使只更改一个或两个选项,宏录制器也会记录该对话框中的所有选项的设置.如果不希望更改所有的选项,可从录制的宏中删除不必要的属性.下面录制的宏包含"段落"对话框的一些选项〔单击"格式"菜单可显示该对话框的所有信息.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=10EndWithEndSub但是,如果只需更改段前和段后间距,可将宏更改为:SubMyMacro<>WithSelection.ParagraphFormat.SpaceBefore=6.SpaceAfter=6EndWithEndSub因为只设置了较少的属性,所以简化后的宏运行得更快.运行结果只更改选定段落的段前和段后的间距,所有其他设置都没有改变.<注意:如果你是一个喜欢乱动的人,还是要上面吧,但他的速度肯定没有下面的快,但他的适合环境更大.更所谓"忠""孝"难两全啊^-^>删除不必要的参数当宏录制器记录一个方法时,会包含所有参数的值.打开名为Test.doc的文档时,录制了下面的宏.所得到的宏包含Open方法的所有参数.SubMacro1<>Documents.OpenFileName:="C:\MyDocuments\Test.doc",_ConfirmConversions:=False,ReadOnly:=False,_AddToRecentFiles:=False,PasswordDocument:="",_PasswordTemplate:="",Revert:=False,_WritePasswordDocument:="",_WritePasswordTemplate:="",Format:=wdOpenFormatAutoEndSub可以从录制的宏中删除不需要的参数.例如,可以删除所有设置为空字符串的参数〔如WritePasswordDocument:="",如下所示.SubMyMacro<>Documents.OpenFileName:="C:\MyDocuments\Test.doc",_ConfirmConversions:=False,_ReadOnly:=False,AddToRecentFiles:=False,_Revert:=False,Format:=wdOpenFormatAutoEndSub三、自动运行的宏通过为一个宏赋予某个特殊的名称,就可在执行某项操作〔例如启动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命令的步骤.在"工具"菜单上,指向"宏",然后单击"宏".在"宏的位置"框中,选择"Word命令".在"宏名"框中,选择"FileSave".在"宏的位置"框中选择一个模板或文档以保存该宏.例如,选择Normal.dot〔全局模板可生成一个共用宏〔即修改所有文档的"FileSave"命令.单击"创建"按钮.FileSave宏显示如下:SubFileSave<>''FileSaveMacro'Savestheactivedocumentortemplate'ActiveDocument.SaveEndSub可添加指令或删除现有的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"EndSubRange对象或Selection对象在使用了InsertBefore或InsertAfter方法之后,会扩展并包含新的文本.使用Collapse方法可以将Selection或Range折叠到开始或结束位置.六、选定文档中的文本可使用Select方法选定文档中的对象.Select方法可用于多种对象,例如Bookmark、Field、Range和Table对象.下列示例选定活动文档中的第一个表格.SubSelectTable<>ActiveDocument.Tables<1>.SelectEndSub下列示例选定活动文档中的第一个域.SubSelectField<>ActiveDocument.Fields<1>.SelectEndSub下列示例选定活动文档中的前四个段落.Range方法用于创建一个引用前四个段落的Range对象,然后将Select方法应用于Range对象.SubSelectRange<>DimrngParagraphsAsRangeSetrngParagraphs=ActiveDocument.Range<_Start:=ActiveDocument.Paragraphs<1>.Range.Start,_End:=ActiveDocument.Paragraphs<4>.Range.End>rngParagraphs.SelectEndSub'选定文档中的文本:我觉得用处不大,原因就是为什么要选中呢?能操作就直接操作,不能的话,就选中吧〔他可以说是没办法的办法.七、编辑文字本主题包含与下列任务相关的VisualBasic示例:确定文本是否被选定折叠选定内容或区域扩展选定内容或区域重新定义Range对象更改文本有关其他编辑任务的信息和示例,请参阅下列主题:从文档返回文本选定文档中的文本将文本插入文档修改文档的某一部分确定文本是否被选定Selection对象的Type属性返回所选内容类型的信息.'如果所选内容为插入点,则下列示例显示一条消息"NothingisSelected".没选中任何问题SubIsTextSelected<>IfSelection.Type=wdSelectionIPThenMsgBox"Nothingisselected"EndSub折叠所选内容或区域使用Collapse方法可将Selection或Range对象折叠到开始或结束点的位置.下列示例在所选内容的开头将所选内容折叠为一个插入点.SubCollapseToBeginning<>Selection.CollapseDirection:=wdCollapseStart'Selection.CollapseDirection:=wdCollapseEndEndSub'这个是标准的折叠的程序,以后可能会用到的噢!下列示例将区域折叠至其结束点〔在第一个单词之后,并添加新文本.SubCollapseToEnd<>DimrngWordsAsRangeSetrngWords=ActiveDocument.Words<1>'设置第一个单词为区域rngWordsWithrngWords.CollapseDirection:=wdCollapseEnd'折叠到最后,区域与可以折叠的噢!.Text="<Thisisatest.>"'在折叠的最后加入这些文字EndWithEndSub扩展所选内容或区域下列示例使用MoveEnd方法扩展所选内容的结尾以包含三个附加的单词〔总共是4个!.MoveLeft、MoveRight、MoveUp和MoveDown方法也可以用于扩展Selection对象.SubExtendSelection<>Selection.MoveEndUnit:=wdWord,Count:=3EndSub下列示例使用MoveEnd方法扩展区域,以包含活动文档中的前三个段落.SubExtendRange<>DimrngParagraphsAsRangeSetrngParagraphs=ActiveDocument.Paragraphs<1>.RangerngParagraphs.MoveEndUnit:=wdParagraph,Count:=2EndSub重新定义Range对象使用SetRange方法可重新定义现有的Range对象.更改文字通过更改某一区域中的内容可更改现有的文字.下列指令通过将Text属性设为"The"来更改活动文档中的第一个单词.SubChangeText<>ActiveDocument.Words<1>.Text="The"EndSub也可以使用Delete方法删除现有文本,然后使用InsertAfter或InsertBefore方法插入新文本.下列示例删除活动文档的第一段,并插入新文本.SubDeleteText<>DimrngFirstParagraphAsRangeSetrngFirstParagraph=ActiveDocument.Paragraphs<1>.RangeWithrngFirstParagraph.Delete.InsertAfterText:="Newtext".InsertParagraphAfterEndWithEndSub'上面的这个例子我们通常不用,我们更喜欢用下面SubDeleteText1<>DimrngFirstParagraphAsRangeSetrngFirstParagraph=ActiveDocument.Paragraphs<1>.RangerngFirstParagraph.Text="Newtext"&Chr<13>EndSub八、将格式应用于文本本主题包含与下列任务相关的VisualBasic示例:将格式应用于选定内容将格式应用于某一区域插入文本并应用字符和段落格式在12磅和无之间切换段前间距切换加粗格式将左边距增加0.5英寸将格式应用于选定内容下列示例使用Selection属性将字符和段落格式应用于选定文本.使用Font属性获得字体格式的属性和方法,使用ParagraphFormat属性获得段落格式的属性和方法.SubFormatSelection<>WithSelection.Font.Name="TimesNewRoman".Size=14.AllCaps=True'全部大写EndWithWithSelection.ParagraphFormat.LeftIndent=InchesToPoints<0.5>'左缩进0.5英寸.Space1'这是单倍行距的缩写EndWithEndSub将格式应用于某一区域下列示例定义了一个Range对象,它引用了活动文档的前三个段落.通过应用Font和ParagraphFormat对象的属性来设置Range对象的格式.SubFormatRange<>DimrngFormatAsRangeSetrngFormat=ActiveDocument.Range<_Start:=ActiveDocument.Paragraphs<1>.Range.Start,_End:=ActiveDocument.Paragraphs<3>.Range.End>WithrngFormat.Font.Name="Arial".ParagraphFormat.Alignment=wdAlignParagraphJustify'两端对齐EndWithEndSub插入文字并应用字符和段落格式下列示例在当前文档的上部添加单词Title.第一段居中对齐,并在该段落之后添加半英寸的间距.将单词Title的格式设为24磅Arial字体.SubInsertFormatText<>DimrngFormatAsRangeSetrngFormat=ActiveDocument.Range<Start:=0,End:=0>WithrngFormat.InsertAfterText:="Title".InsertParagraphAfter'插入段落标记With.Font.Name="Tahoma".Size=24.Bold=TrueEndWithEndWithWithActiveDocument.Paragraphs<1>.Alignment=wdAlignParagraphCenter.SpaceAfter=InchesToPoints<0.5>EndWithEndSub在12磅和无之间切换段前间距下列示例切换选定内容中第一段的段前间距.宏将获取当前段前间距的值,如果该值为12磅,则删除段前间距格式〔将SpaceBefore属性设为零.如果段前间距的值为除12外的其他数值,则将SpaceBefore属性设为12磅.SubToggleParagraphSpace<>WithSelection.Paragraphs<1>If.SpaceBefore<>0Then.SpaceBefore=0Else.SpaceBefore=6EndIfEndWithEndSub切换加粗格式下列示例切换选定文本的加粗格式.SubToggleBold<>Selection.Font.Bold=wdToggleEndSub将左边距增加0.5英寸下列示例将左边距和右边距增加0.5英寸.PageSetup对象包含文档的所有的页面设置属性〔左边距、下边距、纸张大小等.LeftMargin属性用于返回和设置左边距设置.RightMargin属性用于返回和设置右边距设置.SubFormatMargins<>WithActiveDocument.PageSetup.LeftMargin=.LeftMargin+InchesToPoints<0.5>.RightMargin=.RightMargin+InchesToPoints<0.5>EndWithEndSub九、查找并替换文字或格式通过Find和Replacement对象可实现查找和替换功能.Selection和Range对象可以使用Find对象.从Selection或Range对象访问Find对象时,查找操作会略有不同.查找并选定文字如果从Selection对象访问Find对象,当找到搜索条件时,就会更改所选内容.下列示例选定下一个出现的"Hello".如果到达文档结尾时仍未找到"Hello",则停止搜索.WithSelection.Find.Forward=True.Wrap=wdFindStop.Text="Hello".ExecuteEndWithFind对象包含与"查找和替换"对话框中的选项相关的属性〔在"编辑"菜单上选择"查找"可显示该对话框.可以设置Find对象单独的属性或使用Execute方法的参数,如下例所示.Selection.Find.ExecuteFindText:="Hello",_Forward:=True,Wrap:=wdFindStop查找文字,但不更改所选内容如果从Range对象访问Find对象,则找到搜索条件时,不更改所选内容,但是会重新定义Range对象.下列示例在活动文档中查找第一个出现的"blue".如果找到该单词,则重新定义该区域,并将加粗格式应用于单词"blue"..Text="blue".Forward=True.ExecuteIf.Found=TrueThen.Parent.Bold=TrueEndWith下列示例使用Execute方法的参数,执行结果与上例相同.SetmyRange=ActiveDocument.ContentmyRange.Find.ExecuteFindText:="blue",Forward:=TrueIfmyRange.Find.Found=TrueThenmyRange.Bold=True使用Replacement对象Replacement对象代表查找和替换操作的替换条件.Replacement对象的属性和方法对应于"查找和替换"对话框中的选项〔单击"编辑"菜单中的"查找"或"替换"命令可显示该对话框.可通过Find对象使用Replacement对象.下列示例将所有单词"hi"替换为"hello".由于Find对象是通过Selection对象访问的,所以当找到搜索条件时,会更改所选内容.WithSelection.Find.ClearFormatting.Text="hi".Replacement.ClearFormatting.Replacement.Text="hello".ExecuteReplace:=wdReplaceAll,Forward:=True,_Wrap:=wdFindContinueEndWith下列示例取消活动文档中的加粗格式.Find对象的Bold属性为True,而Replacement对象的该属性为False.若要查找并替换格式,可将查找和替换文字设为空字符串<"">,并将Execute方法的Format参数设为True.由于从Range对象访问Find对象,所选内容将保持不变〔Content属性返回一个Range对象..ClearFormatting.Font.Bold=TrueWith.Replacement.ClearFormatting.Font.Bold=FalseEndWith.ExecuteFindText:="",ReplaceWith:="",_Format:=True,Replace:=wdReplaceAllEndWith‘上面的查找与替换是重点!他能解决很多的替换问题.举例:原地址是:=153805&page=1摘题目:怎样用宏统计word文件中某一个汉字,例如"的"字出现的数量?〔可以这样:新建一个文档,输入"=rand<50,50",再按回车〔不包括双引号"",则产生了虚拟文本,在此虚拟文本中试验>方法有三:Subgetfoundcount1<>DimaAsRange,i%Dimc,dc=Timer'设C为运行前的时间ForEachaInActiveDocument.Characters'在字符间循环IfaLike"的"Then'如果是"的"i=i+1'则加上,i的初始值是0,不用设的,默认EndIfNextd=Timer–c'用现在的时间减去运行前的时间等于用时MsgBox"Word找到"&i&"个与此条件相匹配的项!",vbInformation,dEndSub'上面此法利用循环比较字符是否是的是"的"字,来判断!用时下面的图形的标题栏图表SEQ图表\*ARABIC1SubGetFoundCount2<>DimFoundCountAsInteger,myFindTextAsStringDima,ba=TimermyFindText="的".Text=myFindText'要查找的字符.MatchWildcards=False'通配符为不勾选.Wrap=wdFindStop'当查找到后停止,就是每次缩小范围DoWhile.Execute'当查找时则累加FoundCount=FoundCount+1LoopEndWithb=Timer-aDebug.PrintbDebug.PrintFoundCountMsgBox"Word找到"&FoundCount&"个与此条件相匹配的项!",vbInformation,bEndSub'上面是标准的用查找来判断累加,〔也是老大的代码图表SEQ图表\*ARABIC2Subgetfoundcount3<>Dima,b,c,d,e,fd=Timerf=VBA.Asc<"的">'取得"的"的Ascii码b=Split<a,Chr<f>>'用此Ascii码来分裂c=UBound<b>'取得上限e=Timer–d'取得时间Debug.Printe'这个是输出到调试区的Debug.Printc'这个也是MsgBox"Word找到"&c&"个与此条件相匹配的项!",vbInformation,eEndSub'上面是利用数组,把"的"看成是用于split数组的字符,通过是判断数组的上限来判断是几位数组,即是几个"的".图表SEQ图表\*ARABIC3SubGetFoundCount4<>DimstrTextAsString,myTextAsStringDimlngOldAsLong,lngNewAsLongDimTimesAsSingleTimes=VBA.TimermyText="的"lngOld=Len<strText>'包括"的"的长度lngNew=Len<Replace<strText,myText,"">>'替换"的"后的长度MsgBox"Word找到"&lngOld-lngNew&"个与此条件相匹配的项!",vbInformation,VBA.Timer-TimesEndSub图表SEQ图表\*ARABIC4 〔上面是老大又写了一个,老大随后的代码的运行速度更是十分惊人两种方法运行最高.一个是0.1秒与一个是6秒,效率是可想而知!大家试试!十、从文档返回文本使用Text属性可以返回Range或Selection对象中的文本.下列示例选定下一个格式设为"标题1"样式的段落.然后通过MsgBox函数显示Text属性的内容.SubFindHeadingStyle<>WithSelection.Find.ClearFormatting.Style=wdStyleHeading1.ExecuteFindText:="",Format:=True,_Forward:=True,Wrap:=wdFindStopIf.Found=TrueThenMsgBoxSelection.TextEndWithEndSub下列指令返回并显示选定的文本.SubShowSelection<>DimstrTextAsStringstrText=Selection.TextMsgBoxstrTextEndSub下列示例返回活动文档中的第一个单词.Words集合中的每一项是代表一个单词的Range对象.SubShowFirstWord<>DimstrFirstWordAsStringstrFirstWord=ActiveDocument.Words<1>.TextMsgBoxstrFirstWordEndSub下列示例返回与活动文档中第一个书签相关联的文本.SubShowFirstBookmark<>DimstrBookmarkAsStringIfActiveDocument.Bookmarks.Count>0ThenstrBookmark=ActiveDocument.Bookmarks<1>.Range.TextMsgBoxstrBookmarkEndIfEndSubInputBox函数在一对话框来中显示提示,等待用户输入正文或按下按钮,并返回包含文本框内容的String.语法InputBox<prompt[,title][,default][,xpos][,ypos][,helpfile,context]>InputBox函数的语法具有以下几个命名参数:部分描述Prompt必需的.作为对话框消息出现的字符串表达式.prompt的最大长度大约是1024个字符,由所用字符的宽度决定.如果prompt包含多个行,则可在各行之间用回车符<Chr<13>>、换行符<Chr<10>>或回车换行符的组合<Chr<13>&Chr<10>>来分隔.Title可选的.显示对话框标题栏中的字符串表达式.如果省略title,则把应用程序名放入标题栏中.Default可选的.显示文本框中的字符串表达式,在没有其它输入时作为缺省值.如果省略default,则文本框为空.Xpos可选的.数值表达式,成对出现,指定对话框的左边与屏幕左边的水平距离.如果省略xpos,则对话框会在水平方向居中.Ypos可选的.数值表达式,成对出现,指定对话框的上边与屏幕上边的距离.如果省略ypos,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置.Helpfile可选的.字符串表达式,识别帮助文件,用该文件为对话框提供上下文相关的帮助.如果已提供helpfile,则也必须提供context.Context可选的.数值表达式,由帮助文件的作者指定给某个帮助主题的帮助上下文编号.如果已提供context,则也必须要提供helpfile.说明:如果同时提供了helpfile与context,用户可以按F1<Windows>orHELP<Macintosh>来查看与context相应的帮助主题.某些主应用程序,例如,MicrosoftExcel,会在对话框中自动添加一个Help按钮.如果用户单击OK或按下ENTER,则InputBox函数返回文本框中的内容.如果用户单击Cancel,则此函数返回一个长度为零的字符串<"">.注意如果还要指定第一个命名参数以外的参数,则必须在表达式中使用InputBox.如果要省略某些位置参数,则必须加入相应的逗号分界符.总结:交流之二已经非常重要了,他可能是所有的内容中〔包括后面要介绍的最重要的.如果有些地方不太明白,没关系,我会时不时的出一些需要运用交流之二知识能解决的,交流之三也是比较重要的,他与交流之二是包含所有的要学习的"通用方法"了.其后的内容就是介绍一些常规的东东.注意:交流之二的份量比较重,所以,交流之三会推迟一段时间推出!这里有一个比喻:假如你进入一家公司!"交流之一"则是厂规、厂训等制度;"交流之二"就是教你如何做事、该怎么做事?"交流之三"则是教你认识一些同事与一些主要的客户;以后就是今天讨论一点点东东,明天再讨论一点点东东了.再就是看各人的造化了.欢迎大家交流了一下这一块的学习心得,也欢迎提出你的疑问,或你的想法,如果你还什么其他的要求也可以提出来,我们一起来进行探讨,共同提高.免责声明:如果文档有代码或内容侵犯了你的权利,请告诉我,我马上删除,这是一个非盈利的学习,任何商业行为与本学习无关.你可以复制或传播"他"的全部或部分,但请把"免责声明"也加上,〔最好把我们的名字与加上谢谢了.案例说明:有一些是本人自编的,但更多的则是来自网上网友〔尤其是老大――守柔的,其中的案子,大多是随意编的,如有雷同,纯属巧合.如果你不同意你的代码出现在本学习资料中,请告诉我.谢谢各位网友,虽然你的大名不曾出现,但你的精神,我们会记住的.关于微软:微软的帮助也有版权的,但我们是学习,应该不会有版权的事,有的话,马上删.关于时间:主要利用周六、周日来完成学习,当然,平时要看,否则,刚看的东东又忘记了.关于学时:用时一年,一至二周一次.〔保证不低于20课关于教材:选择微软的自带帮助做为交流学习的主要资料是基于以下几点考虑的:因为它权威性最高,通用性最好;它一般不会有版权的事,因为我们是学习他,而不是来盈利;看懂它后,大多的微软同类都是相通的,可以说"学了一个"="学了一类";他有很好的结构,有内涵、也有外延;如果在学习过程中我们某些人坚持不下来,但其他人仍然完全可以继续学习,不会受到影响,这也是最重要的一点.还有一点就是如果长时间不用后,大多会忘记,但帮助始终在.用时,打开帮助,你会看到很多熟练的身影,很容易又找回当初的感觉.将Range对象赋给变量有多种方法将现有的Range对象赋给变量.本主题对两种不同的方法进行了阐述.在下列示例中,将Range对象赋给变量Range1和Range2.例如,下列指令〔通俗的话就是:下列语句将活动文档中的第一个和第二个单词赋给变量Range1和Range2.SetRange1=ActiveDocument.Words<1>SetRange2=ActiveDocument.Words<2>'注意:Words对象是Range对象,它不存在Word对象,你可以这样命名:dimword1asrange,,但是dimword1asword是不行的,也是错的.Words直观的说就是单词,那么,什么是单词呢?中文中没有单词的概念啊!可以这样来理解,英文的单词是以空格分隔的,所以单词就是二个空格之间的字母加空格.〔实验证明,确实是这样的不过,这与我们的关系不大〔因为我们大多处理的是中文.那么中文的"Word"是怎么回事呢?是词组?还是每个汉字呢?其实我也不知道,我是这样来做的,在VBA中输入如下的程序:Sub中文Word<>Dimrange1AsRangeSetrange1=ActiveDocument.Words<1>range1.selectMsgBoxrange1EndSub再新建一个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=Range1Range2和Range1区域具有相同的内容,但它们可能对应文档中的不同位置,甚至对应不同的文档.'上面这句有点难懂,用程序来说明吧〔以后大多是这样,因为我们是学习VBA,只有通过程序来说明内容Sub测试Range1等于Range2<>Dimrange1AsRange,range2AsRangeSetrange1=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>ParagraphSections<index>Section〔这个是"节",就是插入、分隔符中的"节"如果使用这些属性时不带索引序号,则返回一个具有相同名称的集合对象.例如,Paragraphs属性返回Paragraphs集合对象.但是如果通过索引序号识别集合中的一项,则返回上表中第二列中的对象.例如,Words<1>返回一个Range对象〔注意不是Word对象噢.有了一个Range对象之后,可以使用任何区域属性或方法修改该Range对象.例如,下列指令将所选内容的第一个单词复制到"剪贴板".SubCopyWord<>Selection.Words<1>.CopyEndSub'仅供参考!注释Paragraphs和Sections集合中的项是该集合的单个成员,而不是Range对象.但是〔返回Range对象的Range属性对Paragraph和Section对象都可用.例如,下列指令将活动文档的第一段复制到"剪贴板".SubCopyParagraph<>ActiveDocument.Paragraphs<1>.Range.CopyEndSub上述

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论