我有一个单词文档,其中包含遍布文本正文的数字引用。例如“文本字符串1 ”###:###“文本字符串2 ”。请注意数字参考中间的冒号。数字引用的范围可以是结肠两侧的1-999,但每个引用在结肠的每一侧至少有一个数字,两边不超过3个数字。
我需要一个例程来扫描整个文档,识别每个数字引用,然后在数字引用之前输入回车符....所以每个数字引用都会在文档中开始一个段落。为了说明这一点,上面的例子将转换为......
“文字字符串1”
“###:###”“Text String 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