0

我有一个 word 文档,其中的数字参考分布在我的正文中。例如“文本字符串 1 ”###:###“文本字符串 2 ”。注意数字参考中间的冒号。冒号两侧的数字引用范围可能为 1-999,但每个引用在冒号的每一侧至少有一个数字,两侧的数字不超过 3 个。

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

“文本字符串 1”

"###:###" "文本字符串 2"

我已经尝试修改查找/替换操作来做到这一点(到了我要对视的地步)但似乎无法弄清楚。

任何帮助将不胜感激。谢谢!

4

2 回答 2

1

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

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
于 2013-10-17T20:39:08.013 回答
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

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

布拉伊德弗拉伊德弗拉伊

123:133 莱德夫卡伊

123:343 alkdjflakjd

444:78 alkjdlfajkdlksjalk

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

StrText = ActiveDocument.Content.Text

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

于 2013-10-17T20:21:24.370 回答