以下是引用ssq1109在2008-2-7 17:02:29的发言:初步试了一下,用正则替换既快又灵活,但我用下面的代码进行替换有一新问题: Sub 正则替换() '以下为替换示例,设置的替换串没有实际意义 Dim strSource As String Dim RegEx As New VBScript_RegExp_55.RegExp '定义一个新的正则表达式对象 Application.ScreenUpdating = False With ActiveDocument RegEx.Global = True '全程查找 RegEx.IgnoreCase = False ' 区分大小写 strSource = ActiveDocument.Content.Text RegEx.Pattern = "狐": .Content = RegEx.Replace(.Content, "A") RegEx.Pattern = "狸": .Content = RegEx.Replace(.Content, "B") RegEx.Pattern = "\u2291": .Content = RegEx.Replace(.Content, "C") '…… End With Set RegEx = Nothing Application.ScreenUpdating = True End Sub 问题是源文档运行以上代码后,在文档尾部出现N个换行符(N值和代码中设置的替换串的多少相同)。不知何故?也不知怎样避免? ActiveDocument.Content是始终包含文档结束标记的区域,即使是空白文档(可以使用代码检查一下插入内容),也同样。 示例1代码举例了即便是其它替换也同样存在的“问题”,示例2为解决方法。 Sub Example() ActiveDocument.Content.Text = Replace(ActiveDocument.Content.Text, "狐", "A") ActiveDocument.Content.Text = Replace(ActiveDocument.Content.Text, "狸", "B") End Sub Sub E2() Dim myText As String, myRange As Range Set myRange = ActiveDocument.Content myRange.SetRange 0, myRange.End - 1 myText = myRange.Text myText = Replace(myText, "狐", "A") myText = Replace(myText, "狸", "B") ActiveDocument.Content.Text = myText End Sub 另外,从代码本身而言,调用一个string类型比ActiveDocument.Content要快得多(同一对象多次访问时),因此,应该把它赋予一个变量,有利于数据(对象)的访问。 |