您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > Word_vba例子源代码
一)序本书是作者在EXCELHOME()Word版中的部分原自创作品,其中的部分代码是作者耗费大量精力所创,在已知的国内外各WORD论坛中所未见。读者在阅读本书相应代码时,可从相关链接中进行对原帖的查阅,以便能够更好地理解和掌握代码的含义和适用范围。作者整理此书的目的之一,就是希望让有一定WORD基础的朋友能够通过此书的讲解,以提高对WORD以及MS(Microsoft)的认识和操作技能,并希望本书能对想学习VBA和正在学习VBA的读者有所裨益。在阅读本书之前,作者先阐述一下VBA(VisualBasicforApplications)的作用原理:VBA是捆绑在Appliation对象(此处则指Word.Application,简称Word)的一个后台程序;VBE(VisualBasicEditor)是指编辑VBA的一个程序/编辑器(在WORD中按下ALT+F11即可进入),从对象角度看,有Application.VBE(即VBE是附属于Application对象的一个对象),从工程角度看,有ActiveDocument.VBProject(当前文档的VBA工程)。我们知道,Microsoft系统产品是以Windows(广义,非单指WIN系统)著称,是泛指以窗口型的可视化程序,用户与电脑通过程序进行数据交换和人机对话,用户所有的前台(直接用鼠标、键盘等)和后台(编程)操作,都是面向对象的操作。因此正确理解对象的概念、集合、属性、方法是非常必要的。从大范围讲,Application(应用程序)是一个大对象(昀顶层),任何允许用户操作的地方都存在指定的对象,比如常见的标题栏名称(Application.Caption),昀大化昀小化按钮(Application.WindowState),所有的菜单、工具栏、命令等等都是一个对象,用户昀常用的是Selection对象,即选中的内容,Word中是作为Selection对象来处理的,如选中的文字,选中的表格,选中的图形等等,大到Application对象(昀顶层),小到一个字符(Character)甚至一个光标,对于VBA而言,都是一个对象。根据对象分工不同,对象还有父对象、子对象等等。我们通常编程,可以以不同的方式访问对象、修改对象的属性或者指定对象进行特定的动作等。在WORD中,昀重要的对象是Selection对象和Range对象,相当于Excel中的ActiveCell和Range对象。下面我们来讨论一下为什么要编程:Word程序为用户设计了许许多多具有普遍规律的对象的操作方法和属性修改,对于常规的规范化操作,只要用户充分了解了WORD中的操作规律并进行了规范操作,使用WORD的前台功能,已经能基本解决常规问题;但对一些不具有普遍规律并且用户自定义的非规范内容的长时间多次数反复操作,则不可能提供一个完全的、千遍一律的解决方法,那么WORD(MicrosoftOffice)是如何来解决这个问题的呢?MicrosoftWord(Office)在这里为我们提供了强有力的编程手段,编程语言正是解决虽然不具有普遍操作意义的命令,但能使用少数用户的部分WORD功能强化的代码;对于简单的重复组合命令,我们可以通过录制宏的方法进行录制,也可以在录制结束后进行适当的简化,但基本以Selection对象为主,而且录制的宏中每一个对象的所有属性几乎全部被记录,整个代码非常大,效率就低;更为主要的是录制的宏中,对于判断性结构语句,循环语句,函数等等的,是没有提供记录的,所以,要使我们的宏适用于用户、适用于一个特定的操作过程,就需要使用编程来完成。 认识宏安全性:宏是WORD(MicrosoftOffice)提供给用户或者编程人员的一个特定的后台操作环境中的一组代码,是用来完成指定操作的一个过程(大到工程),从广义角度讲,任何不是用户愿意看到的结果的代码,都可以称之为病毒;从狭义角度讲,病毒是专门用来危害用户的操作系统、危害用户的应用程序并使用户在无知情况下进行 非自愿性操作的恶意代码并可能具有自身的复制和传播与变性。对Word而言,我们可以设定宏安全性,这样可以禁止宏的运行或者选择性地运行一些宏,从上述内容中我们也可以看到,如果不用宏,我们很多的自动化、复杂的工作等等都会因之不能使用。因此,宏是一柄双刃剑。但随着MS的防范机制的增加、用户水平的增高、用户杀毒软件的及时有效使用,都会避免恶意病毒(代码)的入侵。退一步而言,以VBA的形式编写的宏病毒,影响是有限的。因此,读者首先不要产生谈宏(Macro)色变的想法,要宏为我所用,同时也提醒编程人员,编程要有所为,有所不为。了解宏的作用原理:WORD应用程序的所有内置命令、模块、过程,不会在VBE中出现,而所有的宏(录制宏、复制宏、代码编程等)均寄生于文档的VBProject中,当用户结合事件触发后或者运行后,才能作用于特定对象,完成特定操作或者返回特定数据。本书中可能涉及的对象,主要有:节(Sections)的循环,段落中(Paragraphs)的循环,句子(Sentences)的循环,词组中(Words)的循环,字(Characters)的循环,表格(Tables)的循环,单元格(Tables(Item).Range.Cells)的循环,自选图形(Shapes)的循环,域(Fields)的循环,书签(Bookmarks)中的循环等等,函数的应用、选择性分支语句、判断语句、错误处理、类模块的使用、用户窗体的使用、数组的应用、Automation等等,不一一列举,读者可根据自身情况,逐一进行渐进式学习。对于书中所涉及的一些代码可能读者还会有更好的、更简单的方法,也或者有些代码还会存在这样那样的问题,这都有待于读者的反馈与交流。在编程上,我们常说的一句话是:没有昀好,只有更好;另外,我也可能会更新部分代码,请注意相关链接。另外由于Office版本号的不同,其中的属性对象方法等也不尽相同,但可向下兼容。如读者有任何疑问可发送邮件到shourou_8@hotmail.com,我将尽快给予答复,有MSN的朋友也可以直接通过MSN进行交流。说明:本文档所涉及的所有代码和中文复制均在VBE中文代码复制器中完成(简化了代码头),全部的代码头说明如下:作者:CreatedBy守柔(ShouRou)时间:2004-12-2109:21:36仅测试于System:WindowsNTWord,是指Windows2000,Word:10.0为OFFICE/WordXP(2002),Language:2052为OFFICE安装语言是中文版(如英文版则为:1033;CopyIn[ThisDocument-ThisDocument]中的前一个ThisDocument是指当前模块为所在的类模块为ThisDocument,后一个ThisDocument是指该类模块的工程名称,使读者可以方便知道模块位置。 '*+++++++++++++++++++++++++++++'*CreatedBy守柔(ShouRou)@ExcelHome2005-1-245:47:47'仅测试于System:WindowsNTWord:10.0Language:2052'^TheCodeCopyIn[ThisDocument-ThisDocument]^''*-----------------------------在此借本书的发表,向一直关心和支持EXCELHOME论坛、支持守柔的所有网友致谢!同时也向为VBA开发作出贡献的先辈们表示由衷的敬意!本书的出版与编辑得到officeFans如意版主的大力支持,一并感谢! 守柔(shourou)整理完成于2004-12-25日 二)空白段落的删除:'*+++++++++++++++++++++++++++++++++++++++'^TheCodeCopyIn[ThisDocument-ThisDocument]^''*--------------------------------------------------------------------------功能简介:可以对指定长度的段落进行删除,当LEN=1时可对空白段落进行删除。SubDelBlank()DimiAsParagraph,nAsLongApplication.ScreenUpdating=False'关闭屏幕刷新ForEachiInActiveDocument.Paragraphs'在活动文档的段落集合中循环IfLen(i.Range)=1Then'判断段落长段,此处可根据文档实际情况i.Range.Delete'进行必要的修改可将任意长度段落删除n=n+1'计数EndIfNextMsgBox共删除空白段落&n&个!Application.ScreenUpdating=True'恢复屏幕刷新EndSub'----------------------=23&ID=24414三)以指定字符重新划分段落并插入时间序列数'*+++++++++++++++++++++++++++++++++++++++'^TheCodeCopyIn[ThisDocument-ThisDocument]^''*--------------------------------------------------------------------------SubCreateParagraph()DimIAsLong,NAsIntegerOnErrorResumeNext'忽略错误Application.ScreenUpdating=False'关闭屏幕更新WithActiveDocument'将文档中所有段落标记删除 .Content.Find.ExecuteFindText:=^p,ReplaceWith:=,Replace:=wdReplaceAllForI=0To.Content.EndStep10'以10个字符位置(包括非打印字符)为步长循环'每段十个字符部分分成段落(注意插入的段落标记也是一个字符).Range(I,I+10+N).InsertAfterChr(13)N=N+1'计算插处的段落标记个数NextEndWithApplication.ScreenUpdating=True'恢复屏幕更新InsertTimerEndSub'----------------------SubInsertTimer()DimIAsParagraph,NAsInteger,TimeStrAsStringOnErrorResumeNext'忽略错误Application.ScreenUpdating=False'关闭屏幕更新 ForEachIInActiveDocument.Paragraphs'在文档新的段落中循环IfN10Then'10,TimeStr的分钟值为5(保持两位数05)TimeStr=[00:0&N&.00]ElseIfN=60Then'N=60时时间数进一并保持该数据(不再向上)TimeStr=[01:00.00]N=0Else'TimeStr的分钟数照计(两位数)TimeStr=[00:&N&.00]EndIfI.Range.InsertBeforeTimeStr'每个段前插入时间数值N=N+5'以5为步长累加NextApplication.ScreenUpdating=True'恢复屏幕更新EndSub'----------------------=23&replyID=280102&id=60333&skin=0四)段落样式与格式的应用功能简介:由于手动录入的段落编号不能被WORD所识别,为以后的样式与格式的设置以及目录索引等
本文标题:Word_vba例子源代码
链接地址:https://www.777doc.com/doc-4897199 .html