早上起来想了想,现在的方法是搜索3位连续的数字,搜索4位才更合理,也更简单,修改了一下。不过没系统地看过VB命令,没找到搜索至文首即退出循环的好方法,仍然采用了临时添加终止符号的方式,看起来麻烦了不少,请多指教。
Sub InsertThousandSplitSymbol()
'年份、小数也将被分隔,运行完毕之后应注意纠正。小数一般最多保留至小数点后两位,不会有影响;年份则通常有较为明显的特征,可以统一替换。
Selection.HomeKey Unit:=wdStory
Selection.TypeText Text:="`0000 "'在文档开始临时添加终止标识符。
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^#^#^#^#"
.Replacement.Text = ""
.Forward = False
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.EndKey Unit:=wdStory'执行一次连续四位数字的搜索,并跳到文末,准备进入正题。
Do Until Selection = "`"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Application.Browser.Previous'没有遇到终止符则跳至刚添加的分隔符左侧,继续查找左侧的连续四位数字。
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=","'添加分隔符。
Selection.MoveLeft Unit:=wdCharacter, Count:=3
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend'选择已处理过的四位数左侧的字符,以检查是否遇到终止符。
Loop
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "`0,000 "
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll'删除临时符号。
End Sub