【问题标题】:Selected or not... word automatically deleting space after sentence选择与否...单词自动删除句子后的空格
【发布时间】:2020-09-10 15:12:46
【问题描述】:

我再次遇到了理解 Word 行为的问题。我想要做的是替换大字文档中的文本。大多数 VBA 代码都按预期工作……部分不是(或至少不在我的大脑中……)。

考虑一个包含这三个句子的word文档:

这是第一句话。这是第二句话。这是第三句。

当我选择第二句时,从大写字母T(This)到句尾包括点后的空格,并运行这段代码

Sub SelectAndReplace()

    Dim myRange As Range
    Dim myText As String
    
    Set myRange = Selection.Range
    myText = "This is the sentence in the middle."
    
    myRange.Delete
    myRange.text = myText

End Sub

然后我在第二句和第三句之间没有空格(middle.This)。这在我看来是合乎逻辑的。但是,如果我选择最后没有空格的第二句,我会得到完全相同的结果。 Word 似乎为我决定了最后的空格也应该被删除。但我不希望这种情况发生。

在研究这个时,我得到了很多关于智能选择单词的信息。我一直在修改这些设置,但在运行代码时没有效果。这实际上让我很高兴,因为我不希望代码根据这些设置在不同的计算机上以不同的方式运行。许多其他人实际上正在寻找解决方案来摆脱多余的空间(这让我的搜索变得困难)

谁能指出我正确的方向?

只是在替换文本的末尾添加一个额外的空格并没有帮助。有时选择/范围会在单词的中间(然后我不想要额外的空格)。

谢谢

【问题讨论】:

  • 当您删除句子时没有选择末尾的空格 Word 检测到有两个空格一起并删除第二个。此行为与您选择一个句子并按删除键时发生的行为相同。
  • @TimothyRylatt 是的,我知道。但是我可以在 VBA 中控制这种行为吗?如果没有……那么我需要重新设计我的部分工作。
  • 啊,我发现我的问题是由“使用智能剪切和粘贴”设置引起的。我怀疑我是否可以用VBA控制。回到绘图桌……
  • Options.PasteAdjustWordSpacing = False
  • 谢谢,非常感谢!我自己也发现了:)。现在回答我自己的问题...

标签: vba ms-word


【解决方案1】:

感谢蒂莫西

Sub SelectAndReplace()

    Dim myRange As Range
    Dim myText As String
    Dim beginStatusPasteAdjustWordSpacing As Boolean
    
    beginPasteAdjustWordSpacing = Options.PasteAdjustWordSpacing 'store status         
    Set myRange = Selection.Range
    myText = "This is the sentence in the middle."
    
    Options.PasteAdjustWordSpacing = False
    myRange.Delete
    myRange.text = myText
    Options.PasteAdjustWordSpacing = beginPasteAdjustWordSpacing 'set back original status

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2019-09-11
    • 2014-12-21
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多