Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Как выделить слово без пробела в конце (http://forum.oszone.net/showthread.php?t=285806)

vanvanov 31-07-2014 01:29 2383431

Как выделить слово без пробела в конце
 
Очень раздражает, что выделение посредством клавиатуры (Ctrl+Shift+Стрелка вправо) приводит к выделению не только самого слова, но также пунктуации и пробела, следующего за ними. Как выделять слово само по себе, без пунктуационных знаков и пробела?

P.S. Я знаю, что это поведение присуще многим windows-программам. На мой взгляд, такое поведение выделения для последующего копирования-вставки в другие приложения крайне неудобно.
P.P.S. Я знаю про Shift+Стрелка влево, однако это костыль и использовать его по 100500 раз в день напрягает. Мне нужно постоянное решение - что угодно: макрос, скрипт, внешнее приложение.

a_axe 31-07-2014 12:16 2383583

vanvanov, объектную модель ворда я представляю смутно, с бедра на вскидку - такой код:
Код:

Sub Select_word()
Dim strTxt As String

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select
End Sub

Ограничение - курсор должен стоять непосредственно перед тем словом, которое вы хотите выделить.
Соответственно, возможен вариант, чтобы курсор стоял в любом месте слова, тут однако код работает не совсем корректно в граничных условиях (при выделении в начале документа, скобочки и т.д.), если есть желание потестировать - попробуйте код ниже (остановить выполнение кода можно сочетанием ctrl+break , если вдруг зависнет)
Посмотреть код:
Код:

Sub s_wd()
Dim strTxt As String
Do
If Selection.Start = 0 Then Exit Do
If Selection.Information(wdFirstCharacterColumnNumber) = 1 Then Exit Do
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
strTxt = Selection.Text
If strTxt = " " Then Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdCharacter, Count:=1

Loop Until strTxt = " "

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select
   
End Sub


vanvanov 01-08-2014 00:42 2383905

a_axe, спасибо большое! Ваш код работает (я пробовал 1-й вариант), однако, тут возникла другая проблема. Я назначил на макрос Ctrl+Shift+Стрелка вправо, чтобы использовать универсальные сочетания клавиш. Но раньше я мог зажать Ctrl+Shift и выделять соседние слова с помощью стрелки вправо, а теперь таким образом выделяется только текущее слово. Может, как-нибудь можно прописать дальнейшее выделение с помощью стрелки вправо?

a_axe 01-08-2014 02:35 2383925

vanvanov, если вас утроит ограничение, что на словах из одного символа (в смысле предлоги "и", "в", "о" и т.п.) код будет останавливаться и курсор нужно будет передвинуть стрелочкой вручную, то:
Код:

Sub Select_word()
Dim strTxt As String
If Len(Selection.Text) <> 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=2
End If

Select Case Selection.Text
Case ".", ",", " ", "!", "?"
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Select

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select
End Sub

Альтернативный вариант кода:
читать дальше »
Код:

Sub s_wd()
Dim strTxt As String
If Len(Selection.Text) <> 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=2
End If

Select Case Selection.Text
Case ".", ",", " ", "!", "?"
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Select

Do
If Selection.Start = 0 Then Exit Do
If Selection.Information(wdFirstCharacterColumnNumber) = 1 Then Exit Do
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
strTxt = Selection.Text
If strTxt = " " Then Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdCharacter, Count:=1

Loop Until strTxt = " "



Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select
   
End Sub


vanvanov 01-08-2014 16:45 2384164

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

LEmiD 24-10-2021 19:36 2969671

Шли годы, а решения так и нет.
Скажите в 10 винде это проблема осталась, а в 11 ? (ну то есть повод обновлять есть или нет, ну они же сделали копипасту в консоле)


Время: 10:51.

Время: 10:51.
© OSzone.net 2001-