【问题标题】:Word VBA: Replace the space at the end of a line if the preceding character is a digitWord VBA:如果前面的字符是数字,则替换行尾的空格
【发布时间】:2020-01-07 12:26:52
【问题描述】:

我发现了这个类似的问题here,但我不知道如何让它满足我的需要。

如果一行末尾有一个数字 ("[0-9]"),我需要替换空格 (" ")。替换文本将是一个不间断的空格 ("^s")。因此,例如,在我的整个文档中,我可能会以“2019 年 9 月 24 日”这种格式书写日期、电话号码、“8 天内”之类的短语等。我需要确保数字和下一个单词之间没有断行,因此用不间断空格替换空格。

我的代码在另一台 PC 上,所以我不容易包含它,到目前为止我所做的只是复制上面链接的那个,但它不起作用,因为我不确定我需要哪些部分修改。因此,请参阅上面的链接了解我到目前为止所获得的内容,或者当然欢迎任何可能更有效的新代码。

提前谢谢你:)

【问题讨论】:

  • 不要只做行尾。将出现的任何数字 替换为数字。这可以通过 Words 查找/替换轻松完成。
  • 这就是我目前所做的,并不理想。这会导致一些不必要的长时间未中断的事件,有些我必须重新中断,几乎无法理解这一点。

标签: vba ms-word


【解决方案1】:

这应该可以解决您的问题:

Sub testNBS()

Dim myRange As Range

Set myRange = ActiveDocument.Range(ActiveDocument.Range.Start, ActiveDocument.Range.Start)
myRange.Select
Selection.Expand wdLine

While Selection.End < ActiveDocument.Range.End
    If Right(Selection.Text, 1) = " " And IsNumeric(Left(Selection.Words.Last, 1)) = True Then
        Selection.Characters.Last = Chr(160)
    End If

    Selection.MoveDown wdLine, 1
    Selection.Expand wdLine
Wend
End Sub

我将Left 更改为Right,添加了对数字字符串的检查,并添加了一个不间断空格(NBS)来代替行中的最后一个字符,这应该是一个空格.我添加了And 子句只是为了仔细检查/验证。

【讨论】:

  • 这在我的快速练习文档中有效,但当我在一封信中使用它时,它只能部分有效。有两个示例,一行以“25”结尾,下一行以“percent”开头,但这两个都没有不间断的空格,但是在格式为 0123 456 7890 的电话号码中,非- 456 和 7890 之间有分隔空间,因为 456 位于行尾,但现在 0123 位于行尾,后面有一个常规空格。我尝试重复代码以使其再次通过文档运行,但它没有执行两次。
  • 我什至无法得到上述结果。此代码导致 Word 崩溃,当突出显示倒数第二页的最后一行时,它似乎卡在某种循环中。从宏中删除此代码会再次修复它,但我不确定它是什么导致它崩溃。
  • @CatJ 我不明白它怎么可能会卡在第二页的循环中,假设文档超过两页。你能提供更多细节吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多