#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