在VBA中的大量数字之间插入空格

时间:2018-09-13 13:33:36

标签: vba ms-word

我想要VBA代码,它可以增加大量的空格,例如我的数字8789798987978979879,我想要的结果是8789 7989 8797 8979 79。

或任何可转换为部分的VBA代码。

谢谢

1 个答案:

答案 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
相关问题