Автор створено

Редактор от Microsoft, проверяя орфографию, подчеркивает неизвестные слова или слова с возможными ошибками для того, чтобы на них обратить внимание. Но если ваш текст имеет русские и английские слова или украинские и английские, то язык может определяться неправильно и Word подчеркнет все слова. Часто такая ситуация возникает при копировании и последующей вставке текста из интернета.

Можно вручную выделить текст, тогда в строке состояния выбрать нужный язык (смотрите скриншот снизу).

Но в таком случае все украинские (русские) слова не будут подчеркнуты, а английские будут. Теперь, чтобы все было как надо, мы должны выделить каждое английское слово (предложение) и указать для него язык. А если текст на 200 страниц? Лучше данный процесс автоматизировать. Так и сделаем. Используем готовый макрос для русского языка и исправим его для использования с украинским.

Код макроса для украинского и английского языка:

'Attribute VB_Name = "PrepForSpell"
Sub PrepForSpell()
'Attribute PrepForSpell.VB_Description = "Macro created 31.01.2002 by nnnnnn"
'Attribute PrepForSpell.VB_ProcData.VB_Invoke_Func = "Normal.NewMacros.PrepForSpell"
'
' PrepForSpell Macro
' Macro created 31.01.2002 by nnnnnn
' Adoption for Word 2003/2007 by Alexey Murzov
'
With Selection
    .WholeStory
    .LanguageID = wdRUkrainian
    .NoProofing = False
    .HomeKey Unit:=wdStory
    n1 = 0
    w1 = "a"
    se1 = .End
    se2 = -1
    Do While se1 <> se2
        w1 = Left(Trim(.Words(1)), 1)
        If w1 <> "" Then
            n1 = Asc(w1)
            If (n1 >= 65 And n1 <= 90) Or (n1 >= 97 And n1 <= 122) Then
                .Words(1).LanguageID = wdEnglishUS
                .Words(1).NoProofing = False
            End If
        End If
        .MoveRight Unit:=wdWord
        se2 = se1
        se1 = .End
     Loop
End With
Application.CheckLanguage = True
If se1 = se2 Then MsgBox "Fixing Eng/Rus language finished.", vbInformation, ""
End Sub

1. Копируем код, который можно видеть выше.

2. Идем в «Вид → Макросы → Макросы».

3. Даем имя для макроса (любое, без пробелов) и нажимаем «Создать».

4. Откроется окно визуального редактора Microsoft Visual Basic. Там уже будет текст с именем вашего макроса (у меня на скриншоте видно, что имя макроса PrepForSpell):

Sub PrepForSpel()
'
' PrepForSpel Макрос
'
'

End Sub

5. Удаляем данный код и заменяем на скопированный ранее.

6. Идем в «Вид → Макросы → Макросы», находим наш добавленный (PrepForSpell) и нажимаем «Выполнить». После окончания работы макроса все пустые строки будут заменены. В случае успешного выполнения макроса будет выведено сообщение как на скриншоте ниже.

Для русского языка используйте аналогичный код:

'Attribute VB_Name = "PrepForSpell"
Sub PrepForSpell()
'Attribute PrepForSpell.VB_Description = "Macro created 31.01.2002 by nnnnnn"
'Attribute PrepForSpell.VB_ProcData.VB_Invoke_Func = "Normal.NewMacros.PrepForSpell"
'
' PrepForSpell Macro
' Macro created 31.01.2002 by nnnnnn
' Adoption for Word 2003/2007 by Alexey Murzov
'
With Selection
    .WholeStory
    .LanguageID = wdRussian
    .NoProofing = False
    .HomeKey Unit:=wdStory
    n1 = 0
    w1 = "a"
    se1 = .End
    se2 = -1
    Do While se1 <> se2
        w1 = Left(Trim(.Words(1)), 1)
        If w1 <> "" Then
            n1 = Asc(w1)
            If (n1 >= 65 And n1 <= 90) Or (n1 >= 97 And n1 <= 122) Then
                .Words(1).LanguageID = wdEnglishUS
                .Words(1).NoProofing = False
            End If
        End If
        .MoveRight Unit:=wdWord
        se2 = se1
        se1 = .End
     Loop
End With
Application.CheckLanguage = True
If se1 = se2 Then MsgBox "Fixing Eng/Rus language finished.", vbInformation, ""
End Sub

Обратите внимание на то, что при желании использовать 2 макроса (для украинского и русского) нужно задать для них разные имена.