Word VBA: Разделить слипшиеся слова с помощью макроса

Автор Anton, 10 января 2018, 16:31

Anton

Есть такая известная проблема: после редактирования документов в ворд 2007 и последующем открытии документа в ворд 2010 и выше, часто происходит потеря пробелов между словами. Слова получаются слипшиеся, иногда несколько подряд.
Можно ли как-то макросом, с помощью механизма встроенной проверки орфографии, разделить их пробелами? Если запустить проверку орфографии вручную, ворд сам предлагает разделить их правильно.
Реально написать макрос для разделения слов в выделенном фрагменте текста или это сложно?

Проверка правописания помогает, когда два слова слиты. А когда больше - не помогает, к сожалению.

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

Если у вас есть связь с человеком, который работает в Word 2007, то попросите его установить обновления для офиса. Возможно эта проблема уже решилась. К тому же Word 2007 уже больше не поддерживается, значит ничего нового в нём уже не будет.

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

Вы хотите, чтобы хотя бы два слипшихся слова можно было разделить?

Anton

Было бы совсем не плохо, а можно еще оставшиеся слова с ошибкой цветом выделить? Не подчеркиванием самого ворд, а цветом? У меня на этом объемном файле ворд ругается и говорит, что слишком много ошибок. Как искать? Читать все замучаешься!

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

Я не знаю, как отличить, где слипшиеся слова, а где просто слово с ошибкой.
Поэтому макрос будет исправлять всё, а не только слипшиеся слова.


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

Но иногда могут быть какие-нибудь специальные слова, которых нет в словаре и они тоже будут исправлены.

Anton

Если будет обрабатываться выделенный фрагмент - будет самое то! Если еще выделяться цветом - то вообще удобно!

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

Макрос работает с выделенным фрагментом и закрашивает исправленные ошибки.

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

    Dim SpellErr As Range, suggest As String, i As Long
   
   
    ' Отключение монитора (может это ускорит макрос).
    Application.ScreenUpdating = False
   
    '1. Проверка, что выделен текст.
    If Selection.Type = wdSelectionIP Then
        Application.ScreenUpdating = True
        MsgBox "Выделите фрагмент.", vbExclamation
        Exit Sub
    End If
   
    '2. Цикл по орфографическим ошибкам, от последней к первой,
        ' т.к. при удалении ошибки, порядковые номера ошибок будут изменяться и будет перескок.
    For i = Selection.Range.SpellingErrors.Count To 1 Step -1
        '1) Присваиваем фрагменту файла, где находится ошибка, имя "SpellErr".
        Set SpellErr = Selection.Range.SpellingErrors(i)
        ' Если ворд предлагает варианты исправлений.
        If SpellErr.GetSpellingSuggestions.Count <> 0 Then
            '2) Проверка, что исправление - это вставка одного пробела, а не какое-то другое исправление.
                ' Нам ведь надо только разделить слипшиеся слова.
            ' Запись исправления в переменную, чтобы ускорить макрос, чтобы
                ' два раза не обращаться к объекту "GetSpellingSuggestions".
            suggest = SpellErr.GetSpellingSuggestions.Item(1).Name
            ' Удаление одного пробела.
            suggest = Replace(suggest, " ", "", , 1)
            ' Сравнение ошибки с предлагаемой заменой, но без пробела.
            If suggest = SpellErr.text Then
                '3) Закраска исправленной ошибки.
                SpellErr.HighlightColorIndex = wdTurquoise
                '4) Исправление ошибки.
                SpellErr.text = SpellErr.GetSpellingSuggestions.Item(1).Name
            End If
        End If
    Next i
   
    ' Вкл. монитора.
    Application.ScreenUpdating = True

End Sub
[свернуть]

Anton

Спасибо большое!
Проверил: если отрывок небольшой - удобно использовать этот макрос.
Можно операцию исправления убрать и только выделять цветом - тоже удобно, ошибки лучше видно, чем волнистое подчёркивание, которое делает сам ворд.