Выбрано или нет … word автоматически удаляет пробел после предложения

#vba #ms-word

#vba #ms-word

Вопрос:

У меня снова возникла проблема с пониманием поведения Word. Что я хочу сделать, так это заменить текст в документах Big 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
  

Тогда я не получаю пробел между вторым и третьим предложением (середина.Это). На мой взгляд, это логично. Но я получаю точно такой же результат, если я выбираю второе предложение без пробела в конце. Word, похоже, решает для меня, что пробел в конце также следует удалить. Но я не хочу, чтобы это произошло.

При исследовании этого я получаю много информации об интеллектуальном выборе word. Я возился с этими настройками, но это не влияет на выполнение кода. Это действительно радует меня, потому что я не хочу, чтобы код выполнялся по-разному на разных компьютерах в зависимости от этих настроек. Многие другие люди на самом деле ищут решения, чтобы избавиться от лишних пробелов (что затрудняет мой поиск)

Кто-нибудь может указать мне правильное направление?

Простое добавление дополнительного пробела в конце моего текста замены не поможет. Иногда выделение / диапазон будут находиться в середине слова (и тогда мне не нужен дополнительный пробел).

Спасибо

Комментарии:

1. Когда вы удаляете предложение без выделения пробела в конце, Word обнаруживает, что есть два пробела вместе, и удаляет второй. Это поведение идентично тому, что происходит, когда вы выбираете предложение и нажимаете клавишу удаления.

2. @TimothyRylatt Да, я знаю. Но могу ли я контролировать это поведение в VBA? Если нет … тогда мне нужно будет переделать часть моей работы.

3. Ах, я обнаружил, что моя проблема вызвана настройками «Использовать интеллектуальное вырезание и вставку». Я сомневаюсь, смогу ли я управлять с помощью VBA. Вернемся к чертежной таблице…

4. Options.PasteAdjustWordSpacing = False

5. Спасибо, я ценю это! Также обнаружил это сам :). Теперь отвечаю на мой собственный вопрос…

Ответ №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