TO KONGGS兄:
第一,关于问号字符,其实就是VBA中不支持的符号,各种不同的符号使用范围由特定的代码页所决定,你不可能在代码窗口中插入图形或者域一样的道理。
第二,我整理的代码,未经特别认真的测试,还是由你这个“始作俑者”完成吧,有问题,可以交流。
第三,大部分的含义和意图我在代码中写得已经很清楚了,有些问题,你通过看代码,能比较出你原代码中的错误、问题和协调性不好的问题。
第四,我在你基础上适当作了些丰富,你看一下,是否需要或者调整其实内容。
第五,这是你首次写的目标比较明确的较长的代码,尽管走了些弯路,还是祝贺你,为你喝彩!不错,希望以后写得更好!
******************************
Option Explicit Sub 高级替换() '本程序主要用于网页下载后的文本处理,它是一个超级替换, '可以删除空白段落\空白手动换行符,全半角空格和全半角不间断空格 '本程序由KONNGS提供,Shourou整理 Dim i As Byte, myFindText As String, TF As Boolean, myReplaceWith As String Dim MyRange As Range Application.ScreenUpdating = False '关闭屏幕更新,加快程序运行 With ActiveDocument For i = 1 To 5 '建立一个五次查找与替换的循环 Select Case i Case 1 Set MyRange = .Content '主文档文字部分中搜索以手动换行符或者段落标记开头的至少一个以上(255以下) '换行符\全半角空格制表位和段落标记的表达式 myFindText = "[^l,^13][^l, , ,^t,^13]{1,}" TF = True '使用通配符 myReplaceWith = "^p" '替换为段落标记 Case 2 Set MyRange = .Content.Paragraphs.First.Range '定义MyRange 为文档第一个段落 myFindText = "[ , ,^t]{1,}" '在第一个段落中查找至少一个以上的全半角空格或者制表位的表达式 TF = True '使用通配符 myReplaceWith = "" '替换为空空,即删除 Case 3 Set MyRange = .Content.Paragraphs.Last.Range '定义MyRange为文档最后一个段落 myFindText = "[ , ,^t]{1,}" '在最后一个段落中查找至少一个以上的全半角空格或者制表位的表达式 TF = True '使用通配符 myReplaceWith = "" '替换为空空,即删除 Case 4 Set MyRange = .Content '定义MyRange 为主文档文字部分 myFindText = "^u8194" '不间断半角空格 TF = False '不使用通配符 myReplaceWith = "" '删除 Case 5 Set MyRange = .Content '定义MyRange 为主文档文字部分 myFindText = "^u8195" '不间断全角空格 TF = False '不使用通配符 myReplaceWith = "" '删除 End Select With MyRange.Find '指定区域范围中的查找与替换 .ClearFormatting '清除格式 .MatchWildcards = TF .Text = myFindText .Execute replacewith:=myReplaceWith, Replace:=wdReplaceAll '根据定义进行全部替换 End With '如果末段和首段为空白段落,则删除之,这段落代码之所以放在循环中,是因为如果在循环前删除,有可能仍然会出现单个空白段落 If Len(.Content.Paragraphs.Last.Range) = 1 Then .Content.Paragraphs.Last.Range.Delete If Len(.Content.Paragraphs.First.Range) = 1 Then .Content.Paragraphs.First.Range.Delete Next i .Content.ParagraphFormat.CharacterUnitFirstLineIndent = 2 '主文档段落首行缩进2字符 End With Application.ScreenUpdating = True '恢复屏幕更新 End Sub
[此贴子已经被作者于2005-11-30 5:59:14编辑过] |