|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
原帖由 tangqingfu 于 2011-8-12 00:46 发表
谢谢chylhr兄的分享!效果不错!
只是运行后提示:“运行时错误:"5854" 字符串参量过长”
可否将代码修改为:如果有选定内容,则只对选定内容进行处理,否则全文档处理?能否再添加对重复段落(序号不同,内容相同 ...
1、关于“运行时错误:"5854" 字符串参量过长”:
答:参数FindText所支持的最长字符串为256个字符,当超过此数量时,就会出现此错误。下面的新代码已修正。
2、关于“如果有选定内容,则只对选定内容进行处理,否则全文档处理?”:
答:下面的新代码已增加此功能。
3、关于“能否再添加对重复段落(序号不同,内容相同的也算是重复内容或重复段落)自动删除处理的程序?”
答:将下面新代码稍做更改即可:将“.Font.Color = wdColorBlue”删除,且将“myRange.Find.Execute FindText:=myFindStr, Replace:=wdReplaceAll, Wrap:=wdFindStop”更改为“myRange.Find.Execute FindText:=myFindStr, Replace:=wdReplaceAll, Wrap:=wdFindStop, ReplaceWith:=""”即可。
新代码如下:
Sub Test()
Dim myPar As Paragraph, myRange As Range, FindArea As Range, myFindRange As Range, myFindStr As String, I As Integer
If Selection.Paragraphs.Count >= 8 Then
Set FindArea = Selection.Range
Else
Set FindArea = ActiveDocument.Content
End If
For Each myPar In FindArea.Paragraphs
I = InStr(1, myPar.Range, ".")
Set myFindRange = myPar.Range
myFindRange.Start = myFindRange.Start + I
On Error Resume Next
myFindStr = "[0-9]{1,}." & Left(myFindRange, 3) & "*" & Right(myPar.Next.Next.Next.Range, 6)
If myFindRange.Font.Color <> wdColorBlue Then
Set myRange = ActiveDocument.Range(myPar.Range.End - 1, FindArea.End)
With myRange.Find
.ClearFormatting
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Color = wdColorBlue
End With
End With
myRange.Find.Execute FindText:=myFindStr, Replace:=wdReplaceAll, Wrap:=wdFindStop
End If
Next
MsgBox "ok"
End Sub |
|