当前位置:
文档之家› Word文档内部检索重复内容的VBA程序代码及使用说明
Word文档内部检索重复内容的VBA程序代码及使用说明
46 橙色 Orange #FF6600 255 102 0
47
蓝- 灰
Blue-Gray
#666699 102 102 153
48
灰- 40%
Gray-40%
#969696 150 150 150
49 深青 Dark Teal #003366 0 51 102
50 海绿 Sea Green #339966 51 153 102
Dim MyArray() As String, aArray As Variant
On Error Resume Next ' 忽略错误
With ActiveDocument ' 遍历段落(注:原始文献资料中提供的是 ThisDocument,我发现没有反应,后来改为ActiveDocument可以了)
36
浅黄 色
Light Yellow
#FFFF99 255 255 153
37 淡蓝 Pale Blue #99CCFF 153 204 255 色
38
玫瑰 红
Rose #FF99CC 255 153 204
39
淡紫 色
Lavender #CC99FF 204 153 255
40 茶色
Tan
#FFCC99 255 204 153
但是如果经常使用这个功能,操作会显得有点麻烦,应在工具栏中设立 一个快捷菜单。
设置方法为:“工具”——“自定义”弹出如下界面,“命令”——“宏”,将对应的功能直接拖入到工 具栏中。
但拖入之后再工具栏中显示的名称是模块的名称(例如:Normal.模块 1.SearchSames)。这样还不够直观,可以更名,如下操作:
With ActiveDocument.Content.Find .Text = s1 .Replacement.Text = s1 .Replacement.Highlight = True .Execute Replace:=wdReplaceAll
End With Exit For End If Next
6 黄色 Yellow #FFFF00 255 255 0
7
粉红 色
Pink
#FF00FF 255 0 255
8
青绿 色
Turquoise
#00FFFF
0 255 255
9
深红 色
Dark Red
#800000 128 0
0
10 绿色 Green #008000 0 128 0
11
深蓝 色
Dark Blue
#808080 128 128 128
17
海螺 色
Periwinkle
#9999FF 153 153 255
18
梅红 色
Plum+
#993366 153 51 102
19 象牙 色
Ivory #FFFFCC 255 255 204
20浅Βιβλιοθήκη 绿Lite Turquoise
#CCFFFF 204 255 255
“重排命令”——“工具栏”——“格式”——“更改所选内容”——“命名”。
实例(查找是否存在相同的句子):
下面这段代码是可以按照句子的模式搜索文档内部全部内容的——根据 标点符号来判断句子,按照一个句子检索全文中是否出现相同的句子, 并且标记为红色。
Sub SearchSames()
Dim i As Paragraph, oSen As Range, MySearchRange As Range
进入“工具”——“宏”——“Visual Basic 编辑器”(或者使用快捷键
Alt+F11直接进入),出现这个界面:
在Normal处,右键,菜单中,增加模块,将如下实例的代码直接复制到 右边的代码区即可。当然在Project里面如此操作也可以,但是只能对你 要处理的文档有效,而在Normal中则保存为通用的功能了。 保存,退出Visual Basic,回到原来的文档状态。运行刚刚加入的宏(可 用Alt+F8直接启动)即可对当前活动的文档进行检查处理。
Options.DefaultHighlightColorIndex = wdBrightGreen '将用绿色标出 (其他颜色也可以任意设置,只要将wdBrightGreen改成wdBlack黑色, wdRed红色,等等,详见后面的对应表) For i = 1 To Len(s) - 2 * n
s1 = Mid(s, i, n) If InStr(i + Len(s1), s, s1) > 0 Then
说明:
使用者要能够熟练使用word,稍微懂一点Visual Basic语言,当然完 全不懂也没有太大关系,只要按照下面做就可以,只是如果懂一点的 话,更容易看懂代码,并且可以进行一些改造,使其更适合个人使用。
我用来验证的系统为Win7旗舰版和Word2003。
操作演示:
启动Word2003,如果宏安全性高的话,无法使用宏功能,要进行设 置“工具”——“宏”——“安全性”——“中”或“低”,再重新启动Word2003 即可。
0
0 128
26
粉红 色
Pink+
#FF00FF 255 0 255
27 黄色 Yellow+ #FFFF00 255 255 0
28
青绿 色
Turquoise+
#00FFFF
0 255 255
29
紫罗 兰
Violet+
#800080 128 0 128
30
深红 色
Dark Red+
#800000 128 0
41
浅蓝 色
Light Blue
#3366FF 51 102 255
42
水绿 色
Aqua #33CCCC 51 204 204
43
酸橙 色
Lime
#99CC00 153 204 0
44 金色 Gold #FFCC00 255 204 0
45
浅橙 色
Light Orange
#FF9900 255 153 0
Next m
End Sub
实例(清除颜色)
在上述操作后,删除了相同的内容,但是保留的内容的颜色会为后续操 作带来一些不便,可以用下面的小代码,一次性清楚全部文档内容的颜 色标记。(当然,如果原来自己标注颜色的内容也会被清除)
Sub ClearColor2003() '清除上面代码所标的红色:
ActiveDocument.Content.HighlightColorIndex = 0
Gray-80%
MySearchRange.Paragraphs(1).Range.Font.Color = wdColorRed Loop Next End With
GN: Next End With
End Sub
实例(查找是否存在相同的字符串)
网友的原始代码如下:
Sub FindRepeat2003()
Dim s As String, s1 As String, i As Long, n As Long s = ActiveDocument.Content n = 3 '所搜索重复字符串长度 Options.DefaultHighlightColorIndex = wdRed '将用红色标出 For i = 1 To Len(s) - 2 * n s1 = Mid(s, i, n) If InStr(i + Len(s1), s, s1) > 0 Then With ActiveDocument.Content.Find .Text = s1 .Replacement.Text = s1 .Replacement.Highlight = True .Execute Replace:=wdReplaceAll End With Exit For End If Next
For Each i In .Paragraphs ' 如果为空白段落则跳过或者到达最后一个 段落则进入下一个循环
If VBA.Len(i.Range) = 1 Or i.Range.Start = st.Range.Start Then GoTo GN
Set MySearchRange = .Range(i.Range.End, .Content.End)
51 深绿 Dark Green #003300 0 51 0
52
橄榄 色
Olive Green
#333300
51
51
0
53 褐色 Brown #993300 153 51 0
54
梅红 色
Plum
#993366 153 51 102
55 靛蓝 Indigo #333399 51 51 153
56
灰- 80%
21
深紫 色
Dark Purple
#660066
102
0
102
22
珊瑚 红
Coral
#FF8080 255 128 128
23
海蓝 色
Ocean Blue
#0066CC
0 102 204
24 冰蓝 Ice Blue #CCCCFF 204 204 255
25
深蓝 色
Dark Blue+
#000080
End Sub
但是这个代码中,设定了n=3,当然用户可以自行更改为任意值,可是 每次这样繁琐的操作,去修改代码再运行,会让用户崩溃的。
因此,我设置了一个小循环,一次性搜索字符串长度在150到250之间 (For m = 250 to 150)的所有内容,每次改变一个单位长度(Step -1)。当然使用者,可以根据自己的情况,任意改变这几个参数。