我正在尝试帮助某人使用 VBA 在 Microsoft Word 中自动进行一些非常简单的文本编辑。
一项期望的更改是删除嵌入在数字中的逗号,同时保留其他逗号。例如:
I like apples, pears, and plums. See 1,234,567
会成为:
I like apples, pears, and plums. See 1234567
该代码查找一个数字,后跟一个逗号,后跟一个数字。要删除两位数之间的逗号,当前代码循环从0,0到9,9Find/Replace
的所有 100 种可能的情况,并对每种情况执行 a 。所以0,0变成00。这是当前代码:
Sub FindAndReplace()
Dim rng As Range, sFind As String, sRep As String
Dim i As Long, j As Long
For i = 0 To 9
For j = 0 To 9
sFind = i & "," & j
sRep = i & j
For Each rng In ActiveDocument.StoryRanges
With rng.Find
.Text = sFind
.Replacement.Text = sRep
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next rng
Next j
Next i
lbl_Exit:
Exit Sub
我确信所有这些循环都是完全没有必要的i
,j
这可以通过简单的通配符模式来完成Find
,但我对 Word 对象模型的了解不够,无法实现这一点。
更新:
RexEx 解决方案运行良好。我还制定了一个通配符解决方案:
Sub CommaKiller()
Dim rngStory As Range
For Each rngStory In ActiveDocument.StoryRanges
With rngStory.Find
.MatchWildcards = True
.Text = "([0-9]),([0-9])"
.Replacement.Text = "\1\2"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next rngStory
End Sub
您可以尝试使用 Microsoft VBScript 正则表达式 5.5 库:
然后您可以构建一个适当的正则表达式模式并让它返回文本中的匹配项,然后从这些匹配项中删除逗号并将清理后的版本返回给文本:
我在那里扔了一些随机数来测试它只会找到包含逗号的数字。
这当然是特定于文化的,在印度尝试使用这个精确的正则表达式可能并不适用于所有数字。但是,我确实认为这种方法很好,您可以根据需要调整正则表达式。
我使用并推荐这个网站来测试正则表达式:
https://regex101.com/