1

Тема: VBA: Непонятки с выделением смежного символа слева от вставки

Привет, народ! Столкнулся с лютыми непонятками, прошу разъяснить! Допустим, есть такой код:

Dim Range1 As Word.Range
Set Range1 = Selection.Range    
Selection.Next(Unit:=wdCharacter, Count:=2).Select
Range1.Text = "-"
Set Range1 = Nothing

Допустим, есть тестовый текст: "SomeText". Теперь делаем так: выделяем в нём букву "o" и запускаем наш код выше -- выделение я тут условно для наглядности обрамлю квадратными скобками (ясно, что в реальности скобок нет). Ниже показано состояние: было/стало (т.е. до выполнения кода и после):

S[o]meText  --  S-m[e]Text

Вместо "o" вставилось тире "-" (точнее, минус, но это не суть), а выделение перешло на [e] -- так и должно по-идее быть, тут всё норм. Но вот если переместить выделение на ОДИН символ, (т.е. написать в коде выше Count:=1, а не Count:=2), то будет вот такая фигня:

S[o]meText  --  S[-m]eText

То есть выделение почему-то расширяется с [m] на вставленное тире [-m], хотя по идее должно быть вроде [m]

При этом если делать аналогично, но вставлять слева -- вот так:


Dim Range1 As Word.Range
Set Range1 = Selection.Range    
Selection.Previous(Unit:=wdCharacter, Count:=1).Select
Range1.Text = "-"
Set Range1 = Nothing

То всё норм, расширения выделения не происходит:

S[o]meText  --  [S]-meText

2 (изменено: 3wedsmncjklvjvd73734, 2026-04-19 18:52:54)

Re: VBA: Непонятки с выделением смежного символа слева от вставки

EgorS пишет:

Допустим, есть тестовый текст: "SomeText". Теперь делаем так: выделяем в нём букву "o" и запускаем наш код выше

А вы не выдедяйте. Тогда у вас все непонятки пропадут.
Или выделяйте в нём букву "o" тоже программно.
А потом запускайте свой код, тоже программно.
Т.е. в одной программе и ваше выделение буквы "o" и этот ваш код в одном флаконе.

3

Re: VBA: Непонятки с выделением смежного символа слева от вставки

3wedsmncjklvjvd73734 пишет:

А вы не выдедяйте. Тогда у вас все непонятки пропадут.

Не выделять нельзя. Ситуация подразумевает именно такое положение вещей: в момент, когда УЖЕ ВЫДЕЛЕН [s] (тут [] обозначают выделение, а "s" -- некий символ) какой-то символ, надо заменить (не перенося на него выделение) другой символ (опять-таки подразумевается, что позиция того, подлежащего замене символа, ранее была сохранена в переменную Range1). Так вот, если заменяемый символ находится сразу левее от выделенного символа (смежный с ним), то происходит описанное мной выше непонятное расширение выделения на 2 символа. В остальных случаях всё работает нормально.

Можно в принципе на случай такого двойного выделения сделать "затычку" и дополнительно обрабатывать такой случай, возвращая двойное выделение в "нормальную" одинарную позицию, но мне интересно понять, почему этот глюк (багофича?) вообще происходит.

3wedsmncjklvjvd73734 пишет:

Или выделяйте в нём букву "o" тоже программно.

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

' Тестовый текст: SomeText
' Перед запуском этого кода ставим курсор перед "o": S¦omeText
'
' Было (до запуска кода) -- стало (после запуска)
' S¦omeText  --  S[-m]eText
'
' А надо, чтобы было:
' S¦omeText  --  S-[m]eText
'
' Вопрос: почему захватывается "-"?

Dim Range1 As Word.Range
' выделили символ справа от курсора: ¦s -> [s]
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Set Range1 = Selection.Range
Selection.Next(Unit:=wdCharacter, Count:=1).Select
Range1.Text = "-"
Set Range1 = Nothing

P.S. Вот вы когда свои ценные советы пишете

3wedsmncjklvjvd73734 пишет:

выделяйте в нём букву "o" тоже программно.

вы сами их реально у себя проверяете, как они работают, или, выражаясь шахматным языком, даёте сеанс игры "вслепую"?

4

Re: VBA: Непонятки с выделением смежного символа слева от вставки

EgorS
Да не парьтесь. Ваш вопрос Столкнулся с лютыми непонятками, прошу разъяснить!
Звучит так же как звучит вопрос "Почему после шипящих (ж, ш, ч, щ) пишется по традиции в определённых грамматических формах, не неся при этом фонетической нагрузки, мягкий знак (ь)... Ведь непонятка, при этом очень лютая?".

5

Re: VBA: Непонятки с выделением смежного символа слева от вставки

3wedsmncjklvjvd73734
Я бы вам не советовал проводить аналогии с грамматикой. Вы ею владеете настолько же плохо, насколько и программированием.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: 3wedsmncjklvjvd73734, 2026-04-20 19:17:38)

Re: VBA: Непонятки с выделением смежного символа слева от вставки

teadrinker
Ответ на вопрос о правописании и вопрос данной темы звучит - "пиши/программируй и не спрашивай".
В ответе нет разницы какой был вопрос. Поэтому и привёл аналогию.

7

Re: VBA: Непонятки с выделением смежного символа слева от вставки

3wedsmncjklvjvd73734 пишет:

программируй и не спрашивай

У нас форум, чтобы спрашивать и получать ответы. Если у вас ответа нет, не нужно писать ничего.

3wedsmncjklvjvd73734 пишет:

Поэтому и привёл аналогию

Это не аналогия, а глупость. В грамматике всегда есть правило, почему пишется так, а не иначе.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: 3wedsmncjklvjvd73734, 2026-04-20 20:51:00)

Re: VBA: Непонятки с выделением смежного символа слева от вставки

OFF

teadrinker пишет:

Это не аналогия, а глупость. В грамматике всегда есть правило, почему пишется так, а не иначе.

Нет там аргументов. Я прежде чем тут написать спец узнал про все эти правила в сети с аргументами.
А чего углубляться, в грамматику? Спросите того кто писал ваш AutoHotKey , "- почему ОН применил двойные двоеточия, (::) вместо двойного тире (--)? Очевидно же, что Он вам ответит. При этом вы нигде не найдёте про ЭТО аргументов сети.

9

Re: VBA: Непонятки с выделением смежного символа слева от вставки

3wedsmncjklvjvd73734 пишет:

Нет там аргументов.

Вы вообще о чём? Каких аргументов? Где — там? Вы что ли с призраками в голове разговариваете?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: VBA: Непонятки с выделением смежного символа слева от вставки

teadrinker пишет:
3wedsmncjklvjvd73734 пишет:

Нет там аргументов.

Вы вообще о чём? Каких аргументов? Где — там? Вы что ли с призраками в голове разговариваете?

"Всем в сад" (R)