Word VBA Макросы: Удаление переносов и кое-что еще

Автор alekseyfrommoscow, 26 октября 2017, 17:02

alekseyfrommoscow

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

81  текст текст , текст ; тек-
ст , текст (текст текст
текст текст текст те
кст); текст , текст , текст
текст;
82  текст . текст текст ,
текст текст ; текст
текст (текст. текст , те
кст);

Логика такая. Если следующая строка НЕ начинается с цифр, то между текущей и предыдущей строкой необходимо удалить перенос; если после удаления переноса между частями слова стоит дефис - удалить его; если два слова оказались склеены - поставить пробел.

Прошу, помогите! Задачка горит.


[вложение удалено администратором]

alekseyfrommoscow

Я так понимаю, архитектура макроса дб примерно такая:
цикл перебора строк {
   если строка НЕ начинается с цифры {
      удалить перенос между ней и верхней строкой,
      если между словами есть "-" или " - ", то удалить это,
      если слова склеились, то поставить пробел между ними
   }
}

Администратор

В ворде можно делать некоторые действия с помощью Найти и заменить. Может быть этого будет достаточно.
То же самое можно сделать из самого ворда, используя Найти и заменить с использованием галочки "Подстановочные знаки".

Макрос
Sub макрос()

    '1. Замена сочетания пробел + спецдефис на спецдефис.
    With ActiveDocument.Range.find
        .text = "( )(^0173)"
        .Replacement.text = "\2"
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
    End With
   
    '2. Удаление сочетания спецдефис + знак абзаца.
    With ActiveDocument.Range.find
        .text = "^0173^13"
        .Replacement.text = ""
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
    End With
   
    '3. Замена сочетания знак абзаца + нецифра на пробел и найденную нецифру.
    With ActiveDocument.Range.find
        .text = "(^13)([!0-9])"
        .Replacement.text = " \2"
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
    End With
   
    '4. Сообщение.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]

alekseyfrommoscow