Редактор от 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 макроса (для украинского и русского) нужно задать для них разные имена.