我想要VBA代码,它可以增加大量的空格,例如我的数字8789798987978979879,我想要的结果是8789 7989 8797 8979 79。
或任何可转换为部分的VBA代码。
谢谢
答案 0 :(得分:0)
您不需要VBA来执行此操作。可以通过非常基本的通配符搜索和替换来完成。
在“搜索和替换”对话框中,确保选中“通配符”复选框。
在“查找内容”字段中输入
'([0-9] {4,4})([0-9])'不带
在“替换为”字段中输入 '\ 1 \ 2'再次不带>
继续按“全部替换”,直到替换为零为止。
发生了什么事?
[0-9]表示找到0-9范围内的任何单个字符。字符范围必须按Ascii顺序。
{,}表示找到紧邻{}如此的字符
[0-9] {4,4}表示在[0-9]范围内至少找到且不超过4个字符
()意味着记住您的发现。
在替换框中\ 1表示使用记住的第一个“查找内容”(\ 2说使用第二个“查找内容”等)
如此
([[0-9] {4,4})([0-9])应用于1234567890
将找到并记住1234为\ 1,将5记住为\ 2
\ 1 \ 2的“替换为”将给我们
1234 56789
但是因为6789后没有数字,所以找不到,这就是为什么需要重复全部替换的原因。
您可以在此处了解有关通配符搜索的更多信息
https://wordmvp.com/FAQs/General/UsingWildcards.htm
VBA等效项是循环运行查找/替换,直到不再找到查找项为止。
Sub test()
splitBigNumbers 3
End Sub
Public Sub splitBigNumbers(Optional splitAt As Long = 4)
replaceText_ReplaceAllWithWildcardOption ActiveDocument, Replace("([0-9]{###,###})([0-9])", "###", CStr(splitAt)), "\1 \2", True
End Sub
Sub replaceText_ReplaceAllWithWildcardOption(this_document As Word.Document, findText As String, replaceText As String, Optional useWildcard = False)
Dim my_continue As Boolean
Do
With this_document.StoryRanges(wdMainTextStory).Find
.ClearFormatting
.Format = False
.Wrap = wdFindContinue
.Text = findText
.Replacement.Text = replaceText
.Forward = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = useWildcard
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
my_continue = .Found
End With
Loop While my_continue
End Sub