在文本中查找数字并在数字之前插入vbCr

时间:2013-10-17 19:37:02

标签: vba replace ms-word word-vba

我有一个单词文档,其中包含遍布文本正文的数字引用。例如“文本字符串1 ”###:###“文本字符串2 ”。请注意数字参考中间的冒号。数字引用的范围可以是结肠两侧的1-999,但每个引用在结肠的每一侧至少有一个数字,两边不超过3个数字。

我需要一个例程来扫描整个文档,识别每个数字引用,然后在数字引用之前输入回车符....所以每个数字引用都会在文档中开始一个段落。为了说明这一点,上面的例子将转换为......

“文字字符串1”

“###:###”“Text String 2”

我已经尝试修改了一个查找/替换操作来做到这一点(到了我的目标),但似乎无法弄明白。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用简单的正则表达式替换函数来执行此操作...

Sub TestSub()
Dim StrText

StrText = "Blajdflajdflaj 123:133 lajdflkaj123:343 alkdjflakjd 444:78 alkjdlfajkdlksjalk"

Debug.Print AddNewLine(StrText)
End Sub

Function AddNewLine(strInput)
Dim objRegEx
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
objRegEx.Pattern = "\d{1,3}\:\d{1,3}"
    'Remove one of the vbCrLf's if you only want a single New Line
AddNewLine = objRegEx.Replace(strInput, vbCrLf & vbCrLf & "$&")
End Function

以上例程将创建以下输出:

  

Blajdflajdflaj

     

123:133 lajdflkaj

     

123:343 alkdjflakjd

     444:78 alkjdlfajkdlksjalk

如果您使用的是MS Word文档,则可以使用以下方法进行测试:

StrText = ActiveDocument.Content.Text

有关正则表达式替换的一些额外阅读,请参阅: http://msdn.microsoft.com/en-us/library/ewy2t5e0.aspx

答案 1 :(得分:1)

我认为只要MS Word中有Find-Replace功能,使用 RegExp 就会有点复杂。试试这段代码:

Sub Find_Replace_Macro()

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find

        .Text = "([ ])([0-9]{1;3}:[0-9]{1;3})"    'solution for non-English version of MS-Word
        .Text = "([ ])([0-9]{1,3}:[0-9]{1,3})"    'solution for English version of MS-Word
        .Replacement.Text = "^13\2"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub