Язык WordBasic - практический подход

Оператор ToolsProtectDocument



Этот оператор служит для установления режима защиты документа от модификации, когда тот открыт. В зависимости от значения параметра .Type, пользователь может сделать изменения лимитированными, например, разрешить добавление аннотаций или отметок изменений. Если документ уже защищён, возникает ошибка.
 
Синтаксис:
 
ToolsProtectDocument [.DocumentPassword = текст] [, .NoReset = число_1] [, .Type = число_2]
 
Аргументы:
.DocumentPassword – пароль требуется для того, чтобы с документа можно было снять защиту (пункт Снять защиту в меню Сервис).
.NoReset – если 1, Word не сбрасывает поля форм в их значения по умолчанию, если форма защищена от изменений с помощью оператора ToolsProtectDocument
(действует только, если атрибут .Type=2).
.Type – тип защиты:
0 (по умолчанию)-- пользователи могут выделять и редактировать текст, но все изменения отмечаются маркерами изменений;


1 – пользователи могут добавлять только;
2 – пользователи могут выделять и модифицировать текст в полях форм.
Чтобы задать какие секции из многосекционной формы должны быть защищены, а какие нет, воспользуйтесь оператором ToolsProtectSection.
 
Пример:
 
Эта макрокоманда защищает документ от редактирования. Оно станет возможно после того как защита будет снята.
 
Sub MAIN
Insert "Этот документ защищён и не может быть изменён."
InsertPara
Insert "Выберите Снять защиту из меню Сервис."
ToolsProtectDocument .Type = 2
End Sub
 
Функция DocumentProtection().
Возвращает значение, задающее режим защиты активного документа. Чтобы изменить его, используйте ToolsProtectDocument. В
Word 6.0, DocumentProtection() недоступна и генерирует ошибку.
Возвращаемые значения.
0 (нуль) – Документ не защищен.
1 – Пользователь может выбирать и модифицировать текст в поле формы.
2 – Пользователь может только добавить аннотации.
3 – Пользователь может выбирать и редактировать текст, но все изменения трассируются с маркерами изменений.
Задает, что текст, который вы хотите найти или заменить, выделен.

 
Оператор EditFindHighlight
 
Когда этот оператор следует за EditFind или EditReplace, в которых параметр .Format установлен в 1, то задает, что текст, который вы хотите найти выделен яркостью. Word ищет любой выделенный текст, даже если в одном документе для выделения были использованы различные цвета. В Word 6.0, EditFindHighlight недоступна и генерирует ошибку.
Пример.
Находятся все вхождения в документ выделенного текста, убирается выделение, а сам текст делается полужирным.
EditFindClearFormatting
EditReplaceClearFormatting
EditFindHighlight
EditReplaceFont .Bold = 1
EditReplaceNotHighlight
EditReplace .Find = "текст", .Replace = "текст1", .Format = 1, .ReplaceAll
EditFindNotHighlight. Задает, что текст, который вы хотите найти или заменить, не выделен. Когда этот оператор следует за EditFind или EditReplace, в которых параметр .Format установлен в 1, то задает, что текст, который вы хотите найти не выделен яркостью. В Word 6.0, EditFindNotHighlight недоступна и генерирует ошибку.
EditReplaceNotHighlight. Когда этот оператор следует за EditReplace, в которой параметр .Format установлен в 1, то задает, что текст, который вы хотите найти не выделен яркостью.
 
Работа с отступами
 
При вставках текста часто бывает полезно добавить или убрать отступ у абзаца или строки. Это делается с помощью следующих простых операторов:
indent – делает отступ или добавляет отступ до следующей позиции табуляции;
unindent
– убирает отступ или уменьшает его до предыдущей позиции табуляции;
HangingIndent – создаёт висячий отступ либо увеличивает существующий висячий отступ выделенного абзаца до следующей позиции табуляции первого абзаца в выделенном блоке текста.
UnHang – уменьшает висячий отступ выделенного абзаца или уменьшает его до предыдущей позиции табуляции первого абзаца в выделенном блоке текста.
Для своего текстового справочника по фирмам я использую следующую макрокоманду:
Sub MAIN
Indent
Insert "lch=" + Date$()


EndOfLine 1
l$ = Selection$()
EditCut
If l$ > 0 Then UnIndent
End Sub
 
Она вставляет в текст строку с датой последнего внесения изменения в запись (last change, lch), затем убирается предыдущая запись и уменьшается отступ. Конечно, этот макрос можно написать короче и более “жестко”: сразу удалить строку и вставить новую дату, но мне мешает программистский менталитет (появляется возможность ошибочно удалить не ту строку и явно нужно проверять та ли строка удаляется).
 
Цветовое оформление текста
 
Оператор CharColor устанавливает цвет символов выделенного фрагмента текста соответственно заданному аргументу. Функция CharColor() возвращает код цвета выделенного текста.
 
Синтаксис:
 
CharColor <цвет>
где цвет
– числовой код для одного из следующих цветов, поддерживаемых в Word 2.0 и 6.0 для Windows:
 

Код цвета
Название цвета
0
Auto (цвет, заданный установкой на Control Panel)
1
Black
2
Blue
3
Cyan
4
Green
5
Magenta
6
Red
7
Yellow
8
White
9
Dark Blue
10
Dark Cyan
11
Dark Green
12
Dark Magenta
13
Dark Red
14
Dark Yellow
15
Dark Gray
16
Light Gray

 
Функция CharColor() возвращает или те же самые номера цветов, которые установлены оператором CharColor, или значение -1, если весь выделенный фрагмент текста не одного цвета. Ниже дан пример использования этой функции:
 
Sub MAIN
n = CharColor()
If n = - 1 Then Print "В выделенном фрагменте используется более чем один цвет "
End Sub
 
Следующая макрокоманда вставляет слово "Color", отформатированное для каждого из 16 возможных цветов
 
Sub MAIN
For count = 1 To 16
CharColor count
Insert "Color"
WordLeft 1, 1
CharRight
InsertPara
Next
End Sub
 
В Word 7.0 появился оператор HighlightColor цвет, позволяющий устанавливать цвет
для выделенного текста и функция HighlightColor(), возвращающая номер используемого цвета, либо признак (-1 – текст выделен разными цветами, 0 – нет выделения цветом).


Номера цветов, как и у оператора CharColor. В Word 6. 0 использование этих операторов будет генерировать ошибку.
 
Обработка ошибок
 
Когда макрокоманда пытается выполнить что-то недопустимое в Word или когда выполнение заданного действия по тем или иным причинам невозможно (например открытие несуществующего файла), он сообщает вам об этом выводя на экран сообщение специального вида. Эти сообщения отличаются от сообщений об ошибках при написании макрокоманды.

После вывода такого сообщение выполнение макрокоманды прекращается и продолжить его с этого места уже нельзя, что очевидно не всегда хорошо.
Однако в WordBasic есть встроенные средства для обработки ошибочных ситуаций. Например вы попытались создать закладку с недопустимым именем. Вместо того, чтобы перезапускать макрокоманду, иногда легче предусмотреть в ней данную ситуацию. Это становится важным, если вы разрабатываете макрокоманды не для себя и если она выполняется часто. конечно нужно избегать крайностей. Старая шутка гласит, что программист забивает всю память компьютера сообщениями об ошибках.
Каждая ошибка в WordBasic имеет свой номер, который можно получить в макрокоманде с помощью функции
 
Автокоррекция
 
Эта возможность позволяет при редактировании быстро производить замены.
Оператор GetAutoCorrect$(имя_входа$) возвращает замещающий текст, по имени этого элемента. Если имя_входа$ не существует, возвращается пустая строка. Операнд имя_входа$ не зависит от регистра.
If GetAutoCorrect$("м2") <> "м²" Then
ToolsAutoCorrect .Replace = " м2", .With = "м²", .Add
End If
 
ToolsAutoCorrectDays, ToolsAutoCorrectDays()
ToolsAutoCorrectInitialCaps, ToolsAutoCorrectInitialCaps()
ToolsAutoCorrectReplaceText, ToolsAutoCorrectReplaceText()
ToolsAutoCorrectSentenceCaps, ToolsAutoCorrectSentenceCaps()
ToolsAutoCorrectSmartQuotes, ToolsAutoCorrectSmartQuotes()
 
Автотекст
Функция CountAutoTextEntries(). Как обычно функция, имя которой начинается с Count, возвращает число записей в таблице Автотекста.Соответствующая ей функция AutoTextName$(номер) возвращает имя записи, номер которой задан в качестве аргумента.
Оператор AutoText. Если есть выделенный текст, выводит на экран диалоговое окно Автотекст и предлагает использовать первые 32 символа в качестве уникального имени записи в таблице Автотекста. Если выделенного текста нет, пытается сравнить текст до и после точки вставки с записями в таблице и, если находит совпадение, производит замену. Word просматривает записи сначала в активном шаблоне, затем в Normal и в последнюю очередь в каждом загруженном глобальном шаблоне (их список и порядок следования можно посмотреть в диалоговом окне Шаблоны и настройки меню Файл
пункт Шаблоны). Если совпадение не найдено, генерируется сообщение об ошибке.
EditAutoText
GetAutoText$()
InsertAutoText
Organizer
SetAutoText
 

Содержание раздела