Проверка правописания
В Word 7.0 для
Windows 95 появились операторы поддерживающие проверку грамматики и ряд других операций. Теперь очень удобно отслеживать так называемые "глазные ошибки" при вводе текста, вот только ОРФО не слишком хорошо различает слова набранные кириллицей от слов в латинице и поэтому в двуязычных текстах красной чертой подчеркнуты правильно набранные слова из-за того что у такого слова стоит не тот признак языка, который нужен. На самом деле это не так безобидно как кажется. При переходе с Word 6.0 на 7.0 мои файлы (в каждом из них смешанный текст на двух языках) “потолстели” на 60-70 Кбайт. Причина заключалась в том, что Word хранит информацию об ошибках правописания. Кроме того, когда таких “ошибок” слишком много, Word отключает автоматическую проверку орфографии, что естественно не радует. Следующая макрокоманда выделяет весь текст документа и устанавливает для него язык “Русский”, затем она последовательно просматривает цепочки слов и помечает слова, набранные латиницей, как “English(US)”. Вы можете модифицировать эти строки, как вам нужно, в частности для одного из текстов, где встречалось много английских названий функций, я поставил “Без проверки”. В этом варианте макрокоманда недостаточно аккуратно обрабатывает достижение конца документа, так как её всегда можно прервать по клавише Esc, но в документе остаётся три закладки, которые удаляются из меню Правка*Закладка*Удалить.
Sub MAIN
' SP – закладка в начале цепочки
' EP – закладка на текущей точке просмотра
' EP1 – закладка в конце распознанной цепочки
StartOfDocument ' выделить документ
EndOfDocument 1
Language "Русский"
StartOfDocument 0 ' поиск цепочек на латинице
SetEndOfBookmark "\Sel", "EP1"
While AtEndOfDocument() <> - 1
WordRight 1, 1 ' следующее слово
SetStartOfBookmark "\Sel", "SP"
Loop:
k = Len(Selection$())
SetEndOfBookmark "\Sel", "EP"
ExtendSelection
EditGoTo "EP"
Cancel
nodefis:
a$ = Right$(RTrim$(Selection$()), 1)
If (a$ = "–") Or Asc(a$) <= 64 Then
SetEndOfBookmark "\Sel", "EP"
Goto nextloop
End If
If Asc(a$) < 123 Then
SetEndOfBookmark "\Sel", "EP1"
WordRight 1, 1
Goto Loop ' продлить цепочку
Else ' смена типа цепочки
If Not(CmpBookmarks("SP", "EP1") = 2) Then
EditGoTo "EP"
Goto nextloop
End If
ExtendSelection
EditGoTo "EP1"
Cancel
If SelType() = 2 Then
Language Language$(7)
EditGoTo "EP"
End If
End If
nextloop:
Wend
End Sub
После обработки документов этой макрокомандой они снова “похудели”, а автоматическая проверка орфографии заработала. Расставлять же вручную признаки языка по тексту в 310 Кбайт – занятие похожее на мазохизм. Так что, пишите макросы!
Ряд новых функций связан с проверкой правописания. следует отметить, что в Word 6.0 эти функции недоступны и генерируют ошибку.
Прежде всего пишущему макрокоманду, обрабатывающую грамматические ошибки потребуется функция DocumentHasMisspellings(), которая возвращает информацию о статусе автоматической проверки правописания в окне активного документа. Она возвращает следующие значения:
Значение |
Пояснение |
-1 |
Или автоматическая проверка правописания выключена (если документ не пуст), или проверка осуществляется в настоящее время. |
0 |
Или документ был полностью проверен и не содержит орфографических ошибок, или документ пуст. |
1 |
Документ был полностью проверен и содержит, по крайней, мере одну орфографическую ошибку. |
Оператор NextMisspelling находит следующее ошибочное слово.
SpellChecked, SpellChecked()указывают, проверено ли правописание выделенного текста или нет.
ToolsSpellingRecheckDocument производит проверку правописания по всему документу.
ToolsOptionsSpelling задаёт параметры для автоматической проверки текста.