守柔(SHOUROU)WORD 编程代码集
一) 序 .................................................................................................................... 4
二) 空白段落的删除: ................................................................................................ 7
三) 以指定字符重新划分段落并插入时间序列数........................................................... 7
四) 段落样式与格式的应用 ....................................................................................... 8
五) 根据预定义段落进行段落样式的设置和插入目录 .................................................... 9
六) 表格集合中的循环与对单元格边框的设置............................................................ 10
七) 书签、数组与排序............................................................................................ 11
八) WORD文档中文词组频率统计 ........................................................................... 12
九) 查找与替换的基本代码用法之一......................................................................... 17
十) 查找与替换的基本代码用法之二......................................................................... 17
十一) 查找与替换的基本代码用法之三(批量替换) ...................................................... 18
十二) 查找与替换的基本代码用法之四-全文件夹替换 ................................................. 20
十三) 判断光标所在行是否有手动分页符 .................................................................. 22
十四) 认识WORD的命令栏、控件按钮..................................................................... 22
十五) 认识WORD 中的对话框(DIALOG) ................................................................. 25
十六) 自定义右键菜单(修改右键) ........................................................................ 25
十七) 修改WORD命令 ........................................................................................... 29
十八) 返回所选(当前)段落指定行号的文本内容一 ...................................................... 31
十九) 返回指定行号文本二 ..................................................................................... 32
二十) 选定当前页文本............................................................................................ 34
二十一) 选定文档任意页(连续)之一 ......................................................................... 35
二十二) 选定文档任意页(连续)之二 ......................................................................... 38
二十三) 邮件合并中条件格式的设置 ........................................................................ 40
二十四) 分页保存-保留格式设置的代码 .................................................................... 41
二十五) 随机文档打开密码的设置............................................................................ 43
二十六) WORD中的中文倒字代码 ........................................................................... 43
二十七) 返回打印设置,取得所有打印页数(张数).................................................. 44
二十八) 在文档中插入根号的两个简洁代码............................................................... 45
二十九) 嵌套域的VBA自动插入代码 ........................................................................ 46
三十) 数字工具 ..................................................................................................... 47
三十一) 三角函数计算............................................................................................ 50
第 1 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
三十二) 汉字拼音解决方案: .................................................................................... 51
三十三) WORD文档的VBPROJECT的引用列表与示例 ............................................... 59
三十四) 制作动态链接库(*.DLL)文件和WORD中引用动态链接库................................. 60
三十五) 语音朗读 .................................................................................................. 62
三十六)
VBE中文代码复制器................................................................................... 63
三十七) 自动图文集与自选图形-自动插入带编号的小旗.............................................. 65
三十八) 图片编辑器............................................................................................... 66
三十九) WORD表格中公式代码自动填充: ................................................................ 71
四十) 取得汉字笔画数(WORD版) ............................................................................ 74
四十一) 后台解除已知密码的VBA工程的代码 ........................................................... 75
四十二) 画直角坐标系............................................................................................ 76
四十三) WORD绘图中的交点自动绘制..................................................................... 80
四十四) WORD 中的AUTOCAD功能 ...................................................................... 82
四十五) 乾坤大挪移............................................................................................... 87
四十六) 遍历文件夹之一 ........................................................................................ 90
四十七) 遍历文件夹之二 ........................................................................................ 91
四十八) 遍历文件夹之三 ........................................................................................ 91
四十九) 遍历文件夹之四 ........................................................................................ 92
五十) 批量重命名文件............................................................................................ 93
五十一) 拖曳ACTIVEX控件 ..................................................................................... 93
五十二) 打字游戏 .................................................................................................. 93
五十三) 关于禁用宏则不能正确打开的代码之一 ........................................................ 98
五十四) 关于禁用宏则不能正确打开的代码之二 ........................................................ 99
五十五) 关于禁用宏则不能正确打开的代码之三 ...................................................... 100
五十六) 关于禁用自动宏(WORDBASIC.DISABLEAUTOMACROS)的用法探究............. 101
五十七) 三位一体打造复选框新方法 ...................................................................... 102
五十八) 删除所有代码(包括自身) .......................................................................... 103
五十九) 输入选定文件夹位置(相当于取得安装目录位置) .......................................... 103
六十) 向NORMALTEMPLATE添加自定义右键.......................................................... 103
六十一) 使用AUTOMATION自动化WORD-EXCEL之一 ............................................ 105
六十二) 使用AUTOMATION自动化WORD-EXCEL之二 ............................................ 106
第 2 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
六十三) 使用AUTOMATION自动化EXCEL-WORD之三 ............................................ 107
六十四) 程序调用示例.......................................................................................... 113
六十五) 多程序协同交互作业示例.......................................................................... 114
六十六) WORD与SPREADSHEET控件的协同作用 .................................................... 116
六十七) 数组运用实例(三则混合运算竖式列表代码)................................................. 118
六十八) 关于注册表的操作 ................................................................................... 121
第 3 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
一) 序
本书是作者在EXCELHOME(http://club.excelhome.net/index.asp)Word版中的部分
原自创作品,其中的部分代码是作者耗费大量精力所创,在已知的国内外各WORD论坛
中所未见。读者在阅读本书相应代码时,可从相关链接中进行对原帖的查阅,以便能够
更好地理解和掌握代码的含义和适用范围。
作者整理此书的目的之一,就是希望让有一定 WORD 基础的朋友能够通过此书的
讲解,以提高对 WORD 以及 MS(Microsoft )的认识和操作技能,并希望本书能对想
学习 VBA 和正在学习 VBA 的读者有所裨益。
在阅读本书之前,作者先阐述一下 VBA(Visual Basic for Applications)的作用原理:
VBA 是捆绑在 Appliation 对象(此处则指 Word.Application,简称 Word)的一个后台程
序;VBE(Visual Basic Editor)是指编辑 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(Microsoft Office)是如何来
解决这个问题的呢?Microsoft Word(Office)在这里为我们提供了强有力的编程手段,
编程语言正是解决虽然不具有普遍操作意义的命令,但能使用少数用户的部分 WORD
功能强化的代码;对于简单的重复组合命令,我们可以通过录制宏的方法进行录制,也
可以在录制结束后进行适当的简化,但基本以 Selection 对象为主,而且录制的宏中每
一个对象的所有属性几乎全部被记录,整个代码非常大,效率就低;更为主要的是录制
的宏中,对于判断性结构语句,循环语句,函数等等的,是没有提供记录的,所以,要
使我们的宏适用于用户、适用于一个特定的操作过程,就需要使用编程来完成。
认识宏安全性:宏是 WORD(Microsoft Office)提供给用户或者编程人员的一个特
定的后台操作环境中的一组代码,是用来完成指定操作的一个过程(大到工程),从广
义角度讲,任何不是用户愿意看到的结果的代码,都可以称之为病毒;从狭义角度讲,
病毒是专门用来危害用户的操作系统、危害用户的应用程序并使用户在无知情况下进行
第 4 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
非自愿性操作的恶意代码并可能具有自身的复制和传播与变性。对 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中文代码复制器中完成(简化
了代码头),全部的代码头说明如下:
作者:Created By 守柔(ShouRou)
时间:2004-12-21 09:21:36
仅 测 试 于 System: Windows NT Word , 是 指 Windows2000, Word: 10.0 为
OFFICE/Word XP(2002),Language: 2052 为 OFFICE 安装语言是中文版(如英文版
则为:1033;CopyIn [ThisDocument-ThisDocument]中的前一个 ThisDocument 是指当
前模块为所在的类模块为"ThisDocument",后一个 ThisDocument 是指该类模块的工程
名称,使读者可以方便知道模块位置。
'* +++++++++++++++++++++++++++++
'* Created By 守柔(ShouRou)@ExcelHome 2005-1-24 5:47:47
'仅测试于 System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------
在此借本书的发表,向一直关心和支持 EXCELHOME 论坛、支持守柔的所有网友致
谢!同时也向为 VBA 开发作出贡献的先辈们表示由衷的敬意!
本书的出版与编辑得到officeFans如意版主的大力支持,一并感谢!
第 5 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
守柔(shourou)
整理完成于 2004-12-25 日
第 6 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
二) 空白段落的删除:
'* +++++++++++++++++++++++++++++++++++++++
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* --------------------------------------------------------------------------
功能简介:可以对指定长度的段落进行删除,当 LEN=1 时可对空白段落进行删除。
Sub DelBlank()
Dim i As Paragraph, n As Long
Application.ScreenUpdating = False '关闭屏幕刷新
For Each i In ActiveDocument.Paragraphs '在活动文档的段落集合中循环
If Len(i.Range) = 1 Then '判断段落长段,此处可根据文档实际情况
i.Range.Delete '进行必要的修改可将任意长度段落删除
n = n + 1 '计数
End If
Next
MsgBox "共删除空白段落" & n & "个!"
Application.ScreenUpdating = True '恢复屏幕刷新
End Sub
'----------------------http://club.excelhome.net/dispbbs.asp?BoardID=23&ID=24414
三) 以指定字符重新划分段落并插入时间序列数
'* +++++++++++++++++++++++++++++++++++++++
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* --------------------------------------------------------------------------
Sub CreateParagraph()
Dim I As Long, N As Integer
On Error Resume Next '忽略错误
Application.ScreenUpdating = False '关闭屏幕更新
With ActiveDocument
'将文档中所有段落标记删除
.Content.Find.Execute FindText:="^p", ReplaceWith:="",
Replace:=wdReplaceAll
For I = 0 To .Content.End Step 10 '以 10 个字符位置(包括非打印字符)为
步长循环
'每段十个字符部分分成段落(注意插入的段落标记也是一个字符)
.Range(I, I + 10 + N).InsertAfter Chr(13)
N = N + 1 '计算插处的段落标记个数
Next
End With
Application.ScreenUpdating = True '恢复屏幕更新
InsertTimer
End Sub
'----------------------
Sub InsertTimer()
Dim I As Paragraph, N As Integer, TimeStr As String
On Error Resume Next '忽略错误
Application.ScreenUpdating = False '关闭屏幕更新
第 7 页 共 122 页
守柔(SHOUROU)WORD 编程代码集
For Each I In ActiveDocument.Paragraphs '在文档新的段落中循环
If N < 10 Then '<10,TimeStr的分钟值为 5(保持两位数 05)
TimeStr = "[00:0" & N & ".00]"
ElseIf N = 60 Then 'N=60 时时间数进一并保持该数据(不再向上)
TimeStr = "[01:00.00]"
N = 0
Else 'TimeStr的分钟数照计(两位数)
TimeStr = "[00:" & N & ".00]"
End If
I.Range.InsertBefore TimeStr '每个段前插入时间数值
N = N + 5 '以 5 为步长累加
Next
Application.ScreenUpdating = True '恢复屏幕更新
End Sub
'----------------------http://club.excelhome.net/dispbbs.asp?BoardID=23&replyID=280
102&id=60333&skin=0
四) 段落样式与格式的应用
功能简介:由于手动录入的段落编号不能被 WORD 所识别,为以后的样式与格式的设置
以及目录索引等带来一系列的问题,本代码即是将其转换为指定样式的过程.
'* +++++++++++++++++++++++++++++++++++++++
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* --------------------------------------------------------------------------
Sub Sample()
Dim i As Paragraph, MyStr As String
Application.ScreenUpdating = False
MyStr = "一二三四五六七八九十" '假定为手动加注每个段落开头为中文大写
数字
For Each i In Me.Paragraphs
If i.Range Like "(#)*" = True Then
i.Style = wdStyleHeading9 '标题 9 是以(1)等开头的数字
ElseIf i.Range Like "#.#.#.#*" = True Then
i.Style = wdStyleHeading8 '标题 8 是以 1.1.1.1 的形式开头的段落
ElseIf i.Range Like "#.#.#*" = True Then
i.Style = wdStyleHeading7 '标题 7 是以 1.1.1 的形式开头的段落
ElseIf i.Range Like "#.#*" = True Then
i.Style = wdStyleHeading6 '标题 6 是以 1.1 形式开头的段落
ElseIf InStr(MyStr, Me.Range(i.Range.Start, i.Range.Start + 1).Text) > 0
Then
i.Style = wdStyleHeading5 '标题 5 是以一等形式开头的段落
Else
i.Style = wdStyleNormal '其它为正文样式
End If
Next
Application.ScreenUpdating = True
第 8 页 共 122 页