Проверка правописания
В 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 задаёт параметры для автоматической проверки текста.
Все публикации раздела