Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2015, 14:48   #1
Alena029
 
Регистрация: 02.04.2015
Сообщений: 3
Сообщение Висячие предлоги,как убрать?

Всем добрый день!

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

Есть такой вариант решения с помощью автозамены:

В «Найти» введите строку «([ ^s])([а-яА-Яa-zA-Z]{1;2}) ([а-яА-Яa-zA-Z])», в поле «Заменить на», введите строку «\1\2^s\3»

Предлоги,союзы приклеиваются с помощью неразрывного пробела к следующему слову.
Все работает хорошо, НО, приклеиваются они не только в конце строки , а по всему тексту.
Можно ли как-то сделать так чтобы это работала только с конечными символами???
или есть другое решение?
Alena029 вне форума Ответить с цитированием
Старый 02.04.2015, 17:45   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Попробуйте макрос:
Код:
Sub ВисячиеПредлоги()
Dim s$, n&
  Selection.HomeKey Unit:=wdStory
  Do
    Selection.EndKey Unit:=wdLine
    If Selection.End + 1 >= ActiveDocument.Range.End Then Exit Do
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    s = Selection.Text
    If s = vbCr Then  'пустой абзац, выделение сместилось на строку вверх!
      Selection.MoveDown Unit:=wdLine, Count:=1
    ElseIf Right$(s, 1) = " " And (Len(s) = 2 Or Len(s) = 3) Then
      Selection.EndKey Unit:=wdLine
      Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
      Selection.TypeText Text:=Chr(160) 'неразрывный пробел; происходит переход на сл. строку
      n = n + 1
      Selection.MoveUp Unit:=wdLine, Count:=1
    End If
    Selection.MoveDown Unit:=wdLine, Count:=1
  Loop
MsgBox "Выполнено замен: " & n, vbInformation
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 03.04.2015, 05:40   #3
Alena029
 
Регистрация: 02.04.2015
Сообщений: 3
По умолчанию

"Казанский"
-спасибо большое предлоги отлично "слетают" на следующую строку, а можно чтобы слова после которых запятая не "слетали", ато они тоже приклеиваются неразрывным к следующему слову?
Alena029 вне форума Ответить с цитированием
Старый 03.04.2015, 23:13   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Изменил условие: перед заменяемым пробелом должна быть буква
Код:
Sub ВисячиеПредлоги1()
Dim s$, n&
  Selection.HomeKey Unit:=wdStory
  Do
    Selection.EndKey Unit:=wdLine
    If Selection.End + 1 >= ActiveDocument.Range.End Then Exit Do
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    s = Selection.Text
    If s = vbCr Then  'пустой абзац, выделение сместилось на строку вверх!
      Selection.MoveDown Unit:=wdLine, Count:=1
    ElseIf LCase$(Right$(s, 2)) Like "[a-zа-яё] " And (Len(s) = 2 Or Len(s) = 3) Then
      Selection.EndKey Unit:=wdLine
      Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
      Selection.TypeText Text:=Chr(160) 'неразрывный пробел; происходит переход на сл. строку
      n = n + 1
      Selection.MoveUp Unit:=wdLine, Count:=1
    End If
    Selection.MoveDown Unit:=wdLine, Count:=1
  Loop
MsgBox "Выполнено замен: " & n, vbInformation
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 05.04.2015, 05:13   #5
Alena029
 
Регистрация: 02.04.2015
Сообщений: 3
По умолчанию

"Казанский", я Вам на почту указанную в профиле письмо отправила...
Alena029 вне форума Ответить с цитированием
Старый 11.04.2015, 05:00   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от Alena029 Посмотреть сообщение
приклеиваются они не только в конце строки
Alena029, а что в этом плохого?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 09.12.2016, 09:00   #7
korney4
 
Регистрация: 09.12.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Изменил условие: перед заменяемым пробелом должна быть буква
Код:
Sub ВисячиеПредлоги1()
Dim s$, n&
  Selection.HomeKey Unit:=wdStory
  Do
    Selection.EndKey Unit:=wdLine
    If Selection.End + 1 >= ActiveDocument.Range.End Then Exit Do
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    s = Selection.Text
    If s = vbCr Then  'пустой абзац, выделение сместилось на строку вверх!
      Selection.MoveDown Unit:=wdLine, Count:=1
    ElseIf LCase$(Right$(s, 2)) Like "[a-zа-яё] " And (Len(s) = 2 Or Len(s) = 3) Then
      Selection.EndKey Unit:=wdLine
      Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
      Selection.TypeText Text:=Chr(160) 'неразрывный пробел; происходит переход на сл. строку
      n = n + 1
      Selection.MoveUp Unit:=wdLine, Count:=1
    End If
    Selection.MoveDown Unit:=wdLine, Count:=1
  Loop
MsgBox "Выполнено замен: " & n, vbInformation
End Sub
не подскажете каким образом изменить макрос, чтобы переносился знак № в конце строки?
korney4 вне форума Ответить с цитированием
Старый 09.12.2016, 09:03   #8
korney4
 
Регистрация: 09.12.2016
Сообщений: 4
По умолчанию

не подскажете каким образом изменить макрос, чтобы переносился знак № в конце строки?
korney4 вне форума Ответить с цитированием
Старый 10.12.2016, 00:27   #9
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

korney4,
просто замените "" (№пробел) на "№^s" (без кавычек) по всему документу.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 04.01.2017, 23:07   #10
Green54
Новичок
Джуниор
 
Регистрация: 04.01.2017
Сообщений: 1
Вопрос

Цитата:
Сообщение от Казанский Посмотреть сообщение
Изменил условие: перед заменяемым пробелом должна быть буква
Код:
Sub ВисячиеПредлоги1()
 s$, n&
  Selection.HomeKey Unit:=wdStory
  Do
    Selection.EndKey Unit:=wdLine
    If Selection.End + 1 >= ActiveDocument.Range.End Then Exit Do
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    s = Selection.Text
    If s = vbCr Then  'пустой абзац, выделение сместилось на строку вверх!
      Selection.MoveDown Unit:=wdLine, Count:=1
    ElseIf LCase$(Right$(s, 2)) Like "[a-zа-яё] " And (Len(s) = 2 Or Len(s) = 3) Then
      Selection.EndKey Unit:=wdLine
      Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
      Selection.TypeText Text:=Chr(160) 'неразрывный пробел; происходит переход на сл. строку
      n = n + 1
      Selection.MoveUp Unit:=wdLine, Count:=1
    End If
    Selection.MoveDown Unit:=wdLine, Count:=1
  Loop
MsgBox "Выполнено замен: " & n, vbInformation
End Sub
Отличный макрос, предлоги слетают хорошо.
Но почему то виснет напрочь на таблицах и рисунках.
Может можно переписать действие макроса только на выделенный фрагмент текста?
Green54 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать цену NewStudent07 Microsoft Office Excel 10 13.08.2013 21:40
Пользователь запретил приглашать себя в приложения", сколько не парился никак не могу убрать. Как убрать? nigretos Свободное общение 3 10.06.2011 15:48
как убрать west777 Помощь студентам 1 21.02.2011 11:11
2 О.С. как убрать одну? Lina2 Операционные системы общие вопросы 1 02.09.2010 15:46
Как убрать сообщение Kingson Microsoft Office Access 2 22.12.2009 11:05