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

         

Диалоговые окна



Begin Dialog . . . End Dialog
CancelButton
CheckBox
ComboBox
Dialog, Dialog()
DialogEditor
DlgControlId()
DlgEnable, DlgEnable()
DlgFilePreview, DlgFilePreview$()
DlgFocus, DlgFocus$()
DlgListBoxArray, DlgListBoxArray()
DlgSetPicture
DlgText, DlgText$()
DlgUpdateFilePreview
DlgValue, DlgValue()
DlgVisible, DlgVisible()
DropListBox
FilePreview
GetCurValues


GroupBox
InputBox$()
ListBox
MsgBox, MsgBox()
OKButton
OptionButton
OptionGroup
Picture
PushButton
Text
TextBox
 



Форматирование


 
К выделенному или выбранному программно блоку текста можно применить все доступные в WinWord способы выравнивания, которые задаются следующими операторами:
 
LeftPara                 по левому краю
CenterPara по центру
JustifyPara             равномерно
RightPara               по правому краю
 
Каждому из этих операторов соответствует одноименная функция, возвращающая результат проверки блока текста на наличие указанного типа выравнивания (см. примеры в Справке)..
SpacePara15  SpacePara15()
SpacePara1   SpacePara1()
SpacePara2   SpacePara2()
 
Пример.
 
Сначала проверим, отцентрирована ли выделенная часть текста полностью или частично. Если нет, то отцентрировать его.
 
Sub MAIN
If CenterPara() = 1 Then
MsgBox “Выделенный текст уже полностью отцентрирован.”
ElseIf CenterPara() = - 1 Then
MsgBox “Текст отцентрирован частично.”
ElseIf CenterPara() = 0 Then
MsgBox “Отцентрировать.”
CenterPara
End If
End Sub
 
Еще один пример:
 
Проверим интерлиньяж в выделенном участке текста и, если он равен одному интервалу, заменим его на двойной.
 
Sub MAIN
A = SpacePara2()
If A < 1 Then
   MsgBox "Установим двойной интервал."
   SpacePara2
Else
   MsgBox "Двойной интервал уже установлен."
End If
End Sub
 
Оператор ChangeCase [On] меняет вид текст в выделенной области из верхнего регистра в нижний и наоборот. Функция ChangeCase().
CharColor НомерЦвета, CharColor(), CharColor$
 



Форматирование символов



Сначала посмотрим как перевести символы в верхний или нижний регистр (т. е. прописные или строчные буквы).
Оператор SmallCaps [On] устанавливает или удаляет форматирование в буквы нижнего регистра для текущего выделения или символов, которые будут вводиться в точке вставки. On=1 устанавливает перевод в нижний регистр, On=0 отменяет его. По умолчанию (если аргумент опущен) устанавливается режим преобразования.
Функция SmallCaps() возвращает следующие значения:
0 – выделенный текст не преобразован в нижний регистр;
-1 – часть текста в нижнем регистре;
1 – весь выделенный текст в нижнем регистре.
AllCaps [On] – в зависимости от параметра (1 – on или 0 – off) включает или выключает преобразование текста в выделенной области в прописные буквы (в верхний регистр). Функция AllCaps() возвращает 0, -1 или 1, если текст, соответственно, не преобразован в верхний регистр, преобразован частично или преобразован полностью.
Пример.
If AllCaps() = -1 Then AllCaps 1
Следующие операторы и функции позволяют сделать выделенные символа соответственно подстрочными и надстрочными и проверить, не являются ли они такими.
Subscript, Subscript()
Superscript, Superscript()
Теперь рассмотрим операторы меняющие вид шрифта. Вся группа этих операторов устроена совершенно одинаково. Все они имеют аргумент, принимающий значение 1 или 0, в зависимости от которого включается или выключает режим заданного форматирования выделенного текста. Соответствующие данным операторам функции возвращают одно из трёх значений:
0 – выделенный текст
не преобразован;
-1 – часть текста преобразована;
1 – преобразован весь выделенный.
 



Функция 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 = "", .Format = 1, .ReplaceAll
 
Задает, что текст, который вы хотите найти или заменить, не выделен.
EditFindNotHighlight. Когда этот оператор следует за EditFind или EditReplace, в которых параметр .Format установлен в 1, то задает, что текст, который вы хотите найти не выделен яркостью. В Word 6.0, EditFindNotHighlight недоступна и генерирует ошибку.
 
На этом мы завершаем цикл занятий, посвященный языку WordBasic. Надеюсь, что, как и мне, они оказались вам в чем-то полезны.
 
 
ОБ АВТОРЕ
Эдуард Михайлович Пройдаков – главный редактор еженедельника PC Week/RE. Контактный телефон: 237-89-01, E-Mail: chief@pcweek.ru.
 
Литература
 
1. М. Штарке, Р. Болльманн. Word для Windows 2.0. Пер. с нем. — К.: BHV, 1993 г. — 440 с.
2. К.
Мусин.
 
Содержание
 
Язык WordBasic: практический подход.........................................................................
Введение (Занятие №1).......................................................................................................................
Советы..........................................................................................................................................................
Элементы языка..................................................................................................................................
Занятие 2....................................................................................................................................................
Встроенные функции языка WordBasic.......................................................................
Взаимодействие с пользователем..................................................................................
Специфика WordBasic (Занятие 3)........................................................................................
Выделение текста...............................................................................................................................
Прибамбасы............................................................................................................................................
Действия над текстом.................................................................................................................
Форматирование..................................................................................................................................
Форматирование символов............................................................................................................
Операторы Bold, Italic, Underline и Strikethrough.........................................................
Оформление списков.......................................................................................................................


Оператор ToolsBulletListDefault............................................................................................
Работа с языком документа..........................................................................................................
Оператор FontSubstitution............................................................................................................
Оператор SymbolFont........................................................................................................................
Функция Hidden().................................................................................................................................
Оператор ToolsProtectDocument...............................................................................................
Работа с таблицами.......................................................................................................................
Средства навигации по таблице..................................................................................................
Об операции вставки..........................................................................................................................
Работа с таблицами (Занятие №4)........................................................................................
Выделение ячеек таблицы...............................................................................................................
Операции над ячейками...................................................................................................................
Встроенные закладки........................................................................................................................
Операции над закладками..............................................................................................................
Работа с окнами................................................................................................................................


Оператор WindowNewWindow.......................................................................................................
Макрокоманды для макрокоманд....................................................................................
Операторы и функции настройки................................................................................................
Работа со структурой документа....................................................................................
Оператор ViewOutline.......................................................................................................................
Операторы OutlineCollapse и OutlineExpand.....................................................................
Оператор OutlineShowFormat......................................................................................................
Оператор ViewToggleMasterDocument...................................................................................
Рамки.........................................................................................................................................................
Оператор ViewBorderToolbar......................................................................................................
WordBasic: операторы редактирования (Занятие №5).......................................
Работа с Буфером обмена................................................................................................................
Оператор EditFindLang.....................................................................................................................
Работа с каталогами.........................................................................................................................
Оператор CopyFile...............................................................................................................................
Операторы ввода-вывода..............................................................................................................


Из макроса можно работать с файлом. Для этого его нужно открыть, а после завершения всех операций записи, закрыть файл..............................................................................................................................
Open "C:\TMP\DATA.TXT" For Output As #1..........................................................................
Print #1, "Name", "Address", "Occupation"............................................................................
Print #1, "Juan Garcia", "123 Main St", "Accountant"......................................................
Close #1.................................................................................................................................................
Оператор Print позволяет выводить текст, не только в строку статуса, но и на принтер. Для этого нужно открыть файл печати следующим образом:................................................................................
CRLF$ = Chr$(13)+Chr$(10)...........................................................................................................
Open "lpt1.dos" For Output As #1............................................................................................
Print #1, "Тест вывода на печать."; CRLF$............................................................................
Этот оператор не выводит на принтер символ перевода строки (код 0Ah), так что его нужно ставить в конце строки самим..............................................................................................................................................
Функция Lof() возвращает длину открытого файла........................................................
Open "My_news.txt" For Input As #1........................................................................................
Size = Lof(1)..........................................................................................................................................


Print Size; " байт"..............................................................................................................................
Close #1.................................................................................................................................................
Sub MAIN................................................................................................................................................
On Error Goto errors.................................................................................................................
Open "C:\WINWORD\README.DOC" For Input As #1.........................................................
Close #1.................................................................................................................................................
FileOpen .Name = "C:\WINWORD\README.DOC".................................................................
Errors:..................................................................................................................................................
If err = 55 Then MsgBox "File Already Open".......................................................................
Close #1.................................................................................................................................................
End Sub..................................................................................................................................................
FileNew – создает новый документ или шаблон...............................................................
Синтаксис:...........................................................................................................................................
Примеры:................................................................................................................................................
Создать новый документ на базе шаблона Memo1.


Расширение . DOT имени файла является необязательным – вы можете задать либо "MEMO1", либо "MEMO1.DOT."...........................................................
FileNew .Template = "MEMO1".....................................................................................................
Следующий пример создает новый шаблон на базе существующего шаблона Letter3:       
FileNew .NewTemplate = 1, .Template = "LETTER3.DOT"..................................................
В этом примере на выполнение запускается "волшебник" Resume:........................
FileNew .Template = "RESUME.WIZ"..........................................................................................
Операторы FileClose.......................................................................................................................
Оператор FileCloseAll...................................................................................................................
Диалоговые окна..............................................................................................................................
Операторы для работы со списками..................................................................................
Работа с документами..............................................................................................................
Оператор LockDocument и функция LockDocument().....................................................
Работа с приложениями.................................................................................................................
Управление элементами интерфейса WinWord.................................................................
Функция Today()................................................................................................................................
Переменные документа и их использование в программе..........................................


Рисование в WordBasic (Занятие №6)..............................................................................
Операторы рисования.....................................................................................................................
Выбор и перемещение объектов.................................................................................................
Оператор DrawSnapToGrid...........................................................................................................
Операторы перемещения рисунка.............................................................................................
Операторы перемещения объектов в стеке...........................................................................
Оператор DrawSetInsertToTextbox........................................................................................
Вспомогательные операторы.....................................................................................................
Использование кнопки записи макро.....................................................................................
Работа с БД............................................................................................................................................
Оператор ToolsRemoveRecordDefault..................................................................................
Оператор ToolsAddRecordDefault..........................................................................................
Работа с формулами.......................................................................................................................
Работа со структурой документа........................................................................................
Операторы изменения уровня.....................................................................................................
Работа с полями (Занятие №7)...............................................................................................


Пример использования полей......................................................................................................
Работа с полями средствами WordBasic...............................................................................
Оператор InsertField.......................................................................................................................
Операторы вставки...........................................................................................................................
Навигация по полям........................................................................................................................
PutFieldData и GetFieldData$()................................................................................................
Операторы блокирования и обновления полей...................................................................
Контроль вывода полей на экран..............................................................................................
WordBasic в Word 7.0 для Windows 95 (Занятие №8)...............................................
Проверка правописания.................................................................................................................
Функция DocumentProtection().................................................................................................
lch=17.11.98 code=162575.................................................................................................................
 
История книги
 
Частично материал опубликован в журнале “Мир ПК” (в 1995 г.) и практически полностью был напечатан в журнале “КомпьютерПресс” (в 1997 г.). Книга по ряду обстоятельств так не была закончена. Если у вас есть время и желание – вы можете это сделать, прислав автору свои дополнения. Автор выступит в этом случае просто как редактор и модератор.
 

Функция Hidden()


 
Синтаксис:
 
Hidden()
 
Возвращаемое значение:
0 – если внутри выделенной области нет скрытого текста;
1 – если часть выделенной области отформатирована как скрытая;
-1 – если вся выделенная область отформатирована как скрытая.
 
Пример:
 
Вывести сообщение, если выделенный текст помечен как “скрытый”:
 
Sub MAIN
Insert "Это тест."
StartOfLine 1
Hidden 1
if Hidden()=1 then print "Весь выделенный текст помечен HIDDEN."
End Sub
 



Функция Today()



В отличие от Now() возвращает целое число, соответствующее установленной в компьютере системной дате.
 
yr = Year(Today())
MsgBox Str$(yr)
 
Функция Day() – служит для определения порядкового дня месяца.
ToolsMacro .Name = text [,.Edit][,.Show=number][,.Delete] [,.Rename][,.Description=text][,.NewName=text][,.SetDesc]
Эта мощная макрокоманда выполняет все действия по работе с макрокомандами. Ее опции соответствуют опциям диалогового окна Макрокоманда меню Сервис.
 
Русская версия WinWord автоматически преобразовывает первую букву в названиях дней недели в заглавную. В режиме автокоррекция отсутствует опция эквивалентная “Copitalite Names of Days” из английской версии. чтобы изменить такой режим нужно создать макрокоманду
 
Sub MAIN
Tools.AutoCorrect, Days=0
End Sub
 



Использование кнопки записи макро



Создание макрокоманды, создающей рисованный объект, далеко не такая простая задача, как это может показаться с первого взгляда. Поэтому я рекомендую вам использовать кнопку Record Next Command в окне редактирования макрокоманд, по нажатию которой WordBasic запишет выполняемое вами действие с панелью Рисование
в виде оператора языка. Второй способ – дважды щелкнуть по кнопке Rec в строке статуса в нижнем правом углу экрана. Разумеется, что управляющие структуры, типа операторов цикла, необходимо записывать вручную. Этот способ быстрой разработки макрокоманды, безусловно, применим и в ряде других случаев. Кто-то сказал, что бывают знания, полезные как марсианские деньги – есть, а деть некуда. Опираясь на свою историю, я могу сказать, что это не так: просто никогда не знаешь, какую “кредитную карточку” придётся достать в тот или иной момент.
 



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



Э. Пройдаков
 
Когда не знаешь куда идти, любая дорога приведет тебя к цели.
Восточная мудрость



Элементы языка


 
Те, кто знаком с языком Бейсик, могут этот раздел либо пропустить, либо посмотреть бегло на возможные отличия и детали.
Когда в WinWord вы вызвали подменю Сервис, выбрали в нем пункт Макрокоманда и ввели имя новой макрокоманды (лучше давать русское название, отражающее выполняемое макрокомандой действие), в диалоговом окне становится доступной опция Создать. Если ее активизировать, то в окне для записи текста макрокоманды появятся скобки главной процедуры:
 
Sub MINE
 
End SUB
 
Между ними вы можете вписывать операторы языка WordBasic, т. е. создавать “тело” будущей макрокоманды. Таким образом каждая из макрокоманд – последовательность операторов WordBasic, расположенных между маркерами Sub Main и End Sub:
 
Sub MAIN
 Последовательность операторов WordBasic
End Sub
 
Прежде всего макрокоманды используются для быстрого ввода часто повторяющихся последовательностей символов или выполнения повторяющихся действий. Связав с нажатием определенной комбинации клавиш выполнение некоторой макрокоманды, можно значительно сэкономить время при работе с документом. Однако так как запоминать даже небольшое число таких сочетаний весьма утомительно, WinWord предоставляет возможность связать имя макроса не только с нажатием комбинации клавиш, но и с пиктограммой на панели инструментов или кнопкой в документе.
По области действия макросы в WinWord делятся на глобальные, которые могут действовать в любом документе, и макросы шаблона, используемые только в документах, создаваемых на базе данного конкретного шаблона. Макросы могут создаваться создаются несколькими способами: программированием на языке WordBasic, с помощью специального средства записи последовательности действий (записывателя макросов), сочетанием первого и второго способов. Хранятся макросы тоже несколькими способами: как команды, как глобальные макросы или как макросы шаблона.
Я думаю, что одна из причин медлительности редактора Word в том, что его команды меню, диалоговые окна и многие другие средства в действительности – макрокоманды, хранящиеся непосредственно в программе Word.

Макрокоманды, созданные пользователем, хранятся либо в шаблоне NORMAL.DOT (глобальные макросы), либо в заданном вами шаблоне документа.
Перечислим кратко основные элементы языка WordBasic.
Метки. Используются в операторах переходов для изменения порядка выполнения инструкций макрокоманды. Метки могут быть цифровыми (числа от 1 до 32759, сохранены в языке для совместимости с предыдущими версиями), алфавитными и алфавитно-цифровыми. В последних случаях метка начинается с буквы, может иметь длину до 40 знаков. Метка должна располагаться с самого начала строки (т.е. ей не должны предшествовать пробелы или символы табуляции) и заканчиваться двоеточием. Правила для имен меток такие же, как и для имен переменных. Лучше располагать метку на отдельной строке. Как это принято в новых Бейсиках, строки программы не нумеруются.(Необходимость нумерации операторов в первых Бейсиках была связана с удобством их построчного редактирования и вставки новых операторов с помощью имевшихся тогда средств.)
Переменные.
Переменная – это место для хранения какой-либо строки знаков или числа. В ходе выполнения макрокоманды содержимое переменной можно изменить. Использование переменных обеспечивает гибкость при написании макрокоманд: меняя значение переменной можно использовать одну и ту же макрокоманду для работы с разными словами.
WordBasic поддерживает два типа данных: числовые и строковые. Соответственно, строковые переменные служат для хранения в них текста (состоящего из букв, чисел, пробелов, знаков пунктуации и любых других знаков), а числовые – чисел. Признаком строковой переменной является знак доллара в конце ее имени. Такая переменная может иметь длину до 65 280 символов (если хватает памяти), т. е. в нее можно считать текстовый файл среднего размера. Двойные кавычки служат для обозначения начала и конца строки текста. (Чтобы включить в строку двойную кавычку или непечатаемый символ используется функция Chr$). Присвоим произвольной строковой переменной какое-нибудь смешное значение:


Реплика$ = "Элементарно, Ватсон!"
Эту переменную можно в подходящем месте программы вывести на экран:
Print Реплика$
Пустая строка – это строка не содержащая ни одного символа. Такую строку можно создать одним из трёх приведённых ниже способов:
 
EmptyString$ = ""
EmptyString$ = Chr$(0)
EmptyString$ = String$(1,0)
 
При создании имени переменной следует придерживаться следующих правил:
1. Имя должно начинаться с буквы. В именах переменных можно использовать кириллицу, кроме буквы ‘ч’.
2. Состоять только из букв, чисел, знака подчёркивания ( _ ); знаки пунктуации и пробелы не допускаются.
3. Имя не может быть длиннее 40 знаков.
4. Имя не может быть зарезервированным словом. (Зарезервированное слово – это слово, которое имеет определённый смысл в WordBasic. В их число входят имена операторов, функций и операторы типа AND, OR, MOD и др.)
Обратите внимание, что идентификаторы в WordBasic не зависят от того, в каком регистре они набраны.
Числовые переменные могут содержать до 14 цифр и соответствуют по типу 8-байтовому числу с плавающей точкой двойной точности. Большие числа могут быть записаны и в так называемой научной нотации. Наибольшее положительное число в WordBasic чуть больше 1.79769E+308.
Массивы. Поддерживаются числовые и строковые одно- и двумерные массивы. Нумерация элементов массива начинается с нуля. Объявление массива с помощью оператора Dim:
 
Dim Имя_переменной(Номер_последнего_элемента)
 
Примеры.
 
Dim Месяц(11)    'массив из 12 элементов
 
Dim Год(12,31)    'массив из 12 строк и 31 колонки
 
В следующем предложении объявляется массив из трех элементов:
Sub MAIN
 Dim ТриСестры$(2)
 ТриСестры$(0) = "Вера "
 ТриСестры$(1) = " Надежда "
 ТриСестры$(2) = " Любовь"
 MsgBox ТриСестры$(0) + ТриСестры$(1) + ТриСестры$(2)
End Sub
 
Максимальный размер одномерного численного массива 8143 элемента, строкового – 16287. Можно одновременно иметь несколько строковых и численных массивов максимальной размерности.


Размер любого объявленного ранее массива можно изменить с помощью оператора Redim (т.е. переобъявить массив). Синтаксис как и у оператора Dim:
 
Redim Имя_переменной(Номер_последнего_элемента)
 
В предыдущем примере можно увеличить размер массива ТриСестры$:
Redim ТриСестры$(6)
если сестер в семье стало семеро. Отметим, что предыдущее содержимое массива в результате этой операции будет потеряно и присваивать значения элементам массива придётся заново. Иногда Redim полезно делать чтобы освободить для других целей память, занимаемую символьным массивом.
Комментарии. Как и в обычном Бейсике, начинаются с ключевого слова REM. Однако, так как оно громоздко для этой цели, их можно начинать и с кавычки (‘).
Операции.
Арифметические:
-      – Отрицательное значение
*     – Умножение
 /     – Деление
 Mod – остаток от деления одного целого числа на другое
 +    – Сложение
 -     – Вычитание
Как всегда круглые скобки () изменяют старшинство операций: сначала выполняются операции внутри скобок.
 
Сравнения: =, <, >, >=, <=, <>
Логические: And, Or, Not
Конкатенация: +
Операторы. Обычно каждый оператор макрокоманды записывается на отдельной строке. Это облегчает отладку и улучшает читабельность ее текста. Если в одной строке записывается несколько операторов WordBasic, они отделяются друг от друга двоеточием. Оператор, не уместившийся на одной строке, можно перенести на следующую, поставив в конце строки обратную косую черту (\). Оператор можно набирать в любом сочетании строчных и прописных букв, т.е. в нижнем или верхнем регистре. При сохранении макрокоманды WordBasic запишет свои ключевые слова правильным образом (из окна ввода макрокоманды выбрать в меню Файл, пункт Сохранить шаблон). WordBasic, как и программа Справки,
распознает их, очевидно, приводя к единому виду.
Действуют стандартные операторы Бейсика.
Оператор перехода:
 Goto метка
передает управление оператору, следующему за указанной в goto меткой. Хотя существует идущее от известной статьи Дейкстры предубеждение против этого оператора, в ряде случаев он полезен.


 
Условный оператор имеет несколько форм записи:
а)
If выражение
Then оператор
If выражение
Then оператор : оператор [...]
Пример.
1. Если отмеченный текст выделен полужирным шрифтом, то отменить полужирный и выделить курсивом:
If Bold() = 1 Then Bold 0 : Italic 1
 
б)
If выражение
Then
операторы
EndIf
 
Пример.
If Italic() = 1 Then                ' Если отмеченный текст выделен курсивом,
Italic 0                                        ' удалить выделение
Bold 1                                        ' выделить полужирным
Underline                                    ' и подчеркнуть его.
End If
 
в)
If выражение Then
  операторы (если True)
Else
  операторы (если False)
EndIf
 
Пример.
If Italic() = 1 Then
Italic 0
Else
Italic 1
End If
 
г)
If выражение_1 Then
  операторы (если True)
ElseIf выражение_2 Then
  операторы (если True второе условие)
Else
  операторы (если False)
EndIf
Так как слова Else, ElseIf, EndIf являются “скобками” в операторе If, то они могут располагаться при записи этого оператора произвольно.
Так как WinWord по умолчанию присваивает всем численным переменным значение 0, то использование переменных с неприсвоенными им в программе значениями не диагностируется. Так, оператор
If false Then A=1 Else B=2
выполнится правильно, а
If true Then A=1 Else B=2
отработает как предыдущий. Из-за того, что встроенных констант false и true в языке WordBasic нет, они рассматриваются как переменные.
 
Select Case
<добавить описание>
 
Циклы.
Обычный цикл. Выполняет последовательность операторов до тех пор пока значение счетчика
не станет больше значения выражения_2. После каждого цикла счетчик
увеличивается на 1.
 
For счетчик = выражение_1
To выражение_2
      операторы
Next
 
Если значение счетчика больше значения выражение_1, то цикл не выполняется ни разу.
 
While выражение
      операторы ‘выполняются, пока выражение true
Wend


 
Циклы могут быть вложенными, как и в любом процедурном языке.
 
Оператор Stop.
прекращает выполнение макрокоманды. Если вывод сообщений не подавлен, то на экране появится окно с предупреждением, что выполнение данного макроса прекращено. Этот оператор полезен также при отладке макрокоманд.
Как видно из этого перечисления, управляющие структуры в языке слабо развиты, так как он не предназначался для разработки программ большого объема.
Программные блоки.
Макрокоманда (программа на WordBasic) может состоять из одного или нескольких программных блоков, один из которых является главным и называется MAIN. Ему WinWord передает управление при запуске программы на исполнение (саму макрокоманду WinWord рассматривает как подпрограмму).
 Разбиение программы на блоки не только облегчает отладку и чтение ее текста (который называется исходным текстом), но также позволяет быстрее разрабатывать другие макрокоманды. При этом ранее написанные процедуры (в виде библиотек подпрограмм и функций?) используются в качестве строительных блоков.
Общая структура программы на WordBasic выглядит так:
Sub MAIN
      Последовательность операторов WordBasic и/или
      имена_подпрограмм
End Sub
Sub имя_подпрограммы_1
      Последовательность операторов WordBasic
End Sub
.......
Sub имя_подпрограммы_N
      Последовательность операторов WordBasic
End Sub
 
В языке определены два вида подпрограмм: подпрограммы и функции. Структурно они оформляются так:
Sub имя (аргументы)
      Последовательность операторов WordBasic
End Sub
 
Function имя_функции (аргументы)
      Последовательность операторов WordBasic
      имя_функции
= возвращаемое_значение
End Function
 
Подпрограмма вызывается указанием ее имени и макроса, в котором данная подпрограмма определена. Использование ключевого слова Call при этом необязательно, хотя и допускается, чтобы отличить процедуры в макрокомандах от операторов WordBasic. Так, если процедура Beep(Count) определена в макросе LibMacros, то ее вызов с аргументом 8 выглядит так:
LibMacros.Beep(8)
 

Контроль вывода полей на экран


 
Осуществляется с помощью операторов ViewFieldCodes, ToggleFieldDisplay и функции ViewFieldCodes().
Синтаксис:
ViewFieldCodes [0|1]
ViewFieldCodes()
 
Оператор ViewFieldCodes управляет выводом не экран всех полей в активном документе. Вывод кодов полей задаётся в диалоговом окне Коды полей (пункт Параметры, меню Сервис). Вы можете управлять выводом на экран с помощью оператора ToggleFieldDisplay.
Аргумент:
0 – выводить результат вычисления поля;
1 – выводить коды полей.
Оператор ToggleFieldDisplay меняет режим отображения полей на экране на противоположный, дополняя таким образом оператор ViewFieldCodes.
Функция ViewFieldCodes() возвращает следующие значения:
0 – если значение поля выводится на экран;
-1 – если выводится код поля.
 



Макрокоманды для макрокоманд


 
Команда ToolsMacro .Run имеет аргумент, который предназначен для следования иерархии контекста.
Если макро запускается из командной строки (например напечатав "WIN WINWORD /mMyMacro" из подсказки MS-DOS), Word ищет этот макрос сначала в шаблоне документа, затем в NORMAL.DOT и наконец среди встроенных команд. Эта иерархия сохраняется даже если макро имеет тоже самое имя, что и имя встроенной команды (такой как FilePrint).
Если вы запускаете макрокоманду с именем, совпадающим с именем встроенной макрокоманды, Word запустит встроенную.
Если команда ToolsMacro .Run запущена без задания аргумента .Show, то макрокоманда выполняется в контексте заданном при последнем выборе пункта Макрокоманда (Macro) в меню Сервис (Tools).
Если вы запустили макро на выполнение используя команду ToolsMacro .Run с аргументом .Show = 0, эта макрокоманда будет искаться в соответствии с принятой в Word иерархией поиска. В следующем примере Word ищет макрокоманду сначала в шаблоне документа, затем в NORMAL.DOT, и наконец среди встроенных макрокоманд.
ToolsMacro .Name = "mymacro", .Show = 0, .Run
 



Навигация по полям



Следующие операторы и функции позволяют перемещать точку вставки соответственно на следующее или предыдущее поле: NextField, NextField(), PrevField и PrevField()
Оператор NextField выбирает следующее поле в документе, независимо от того, показывает поле свой код или результаты. NextField пропускает следующие форматированные как скрытый текст поля: XE (элемент индекса), TA, TC (элемент оглавления) и RD. Функция NextField() выполняет все те же действия, что и оператор, но кроме того возвращает следующие значения:
0 – больше нет полей;
1 – если IP перешла на следующее поле.
Если коды полей выводятся на экран, то для перехода к следующему полю с ними можно использовать оператор EditFind (включая XE, TA, TC и RD). Задайте "^d" (это код символа для поля) в качестве текста для аргумента .Find, как показано в примере:
 
ViewFieldCodes 1
EditFind .Find = "^d", .Direction = 0, .Format = 0
 
Чтобы найти только поля XE, задайте в качестве текста для поиска "^d XE".
Понятно, что PrevField и PrevField() делают тоже самое, только по отношению к предыдущему полю.
 



Об операции вставки


 
Оператор Insert вставляет текст в то место документа, где находится IP. Если IP внутри выделенного текста, то этот текст будет замещен вставляемым текстом, если в Сервис·Опции·Редактирование установлен флаг "Режим забивки символов при вводе". Вставляемый текст не форматирован – на него распространяется оформление от текста,
находящегося слева. Если вставляемый текст нужно оформить каким-либо другим способом, то перед вставкой следует применить соответствующее форматирование:
 
Sub MAIN
Bold 1              ' выделить полужирным
Insert "Внимание!"
Bold 0              ' убрать полужирный
Insert "Сравните результат."
End Sub
 
Еще один пример, хорошо иллюстрирующий несколько необычную логику работы WordBasic при выделении части текста:
 
ParaDown 1            ' перейти в конец абзаца;
' ! IP может находиться в середине абзаца
ParaUp 1,1 ' в начало абзаца c выделением его
If Selection$() = Chr$(13) Then
      MsgBox "Пустая строка."
End If
 
Этот фрагмент можно использовать в макрокоманде подсчитывающей число абзацев в документе (пустую строку абзацем не считаем):
 
Sub MAIN
StartOfDocument
Count = 0
While ParaDown()
ParaUp 1, 1
If Selection$() <> Chr$(13) Then Count = Count + 1
ParaDown 1, 0
Wend
MsgBox "Абзацев: " + Str$(Count-1)
End Sub
 
Три специальных формы оператора Insert:
 
InsertSectionBreak
InsertPageBreak
InsertColumnBreak
InsertSectionBreak
 
Синтаксис:
 
InsertSectionBreak
 
Пример.
 
Sub MAIN
FileNewDefault
ViewPage
For count = 1 To 50
Insert "This is a test."
InsertPara
Next count
StartOfDocument
LineDown 15
InsertSectionBreak
LineDown 15
InsertSectionBreak
LineUp 5
WindowArrangeAll
FilePageSetup .TopMargin = "1" + Chr$(34), .BottomMargin = "1" +
Chr$(34), .LeftMargin = "2.75" + Chr$(34), .RightMargin = "2.75" +
Chr$(34)
End Sub

 
 
InsertPageBreak
 
Синтаксис:
 
InsertPageBreak
 
Пример.
 
Sub MAIN
FileNewDefault
For count = 1 To 5
Insert "This is a test of page breaks."
InsertPageBreak
Next count
Insert " This text should be on page 6"
End Sub
 
Оператор InsertColumnBreak
 
Синтаксис:
 
InsertColumnBreak
 
Пример.
 
Sub MAIN
FileNewDefault
ViewPage
FormatColumns .Columns = "2"
For count = 1 To 50
Insert "This is a test."
InsertPara
Next count
StartOfDocument
LineDown 25
InsertColumnBreak
End Sub
 
Следующие операторы не имеют аргументов:
 
InsertSound
InsertWordArt
InsertChart
InsertDrawing
InsertEquation
InsertExcelTable
 
InsertField "quote" + Chr$(34) + Name$ + Chr$(34)
 
InsertDatabase
 
Синтаксис:
 
InsertDatabase [.Format = number] [, .Style = number]
[, .LinkToSource = number] [, .Connection = text]
[, .SQLStatement = text] [, .SQLStatement1 = text]
[, .PasswordDoc = text] [, .PasswordDot = text] [, .DataSource =text] [, .From = text] [, .To = text] [, .IncludeFields = number]
 

Операции над ячейками



Ниже перечислены операторы и функции, выполняющие различные действия над ячейками таблицы. Некоторые из них имеют множество операндов, описание которых я здесь для экономии места опустил, так как оно имеется в Справке.
TableInsertColumn – вставить новую колонку;
TableInsertRow – вставить новую строку;
TableInsertTable – создать таблицу;
TableRowHeight – изменить высоту строк таблицы;
TableMergeCells – объединить выделенные ячейки в одну. Удобен для оформления заголовков таблицы.
TableSort – сортировка ячеек таблицы.
Table DeleteColumn – удаляет колонку, содержащую точку вставки.
TableDeleteRow – удаляет строку, содержащую точку вставки.
TableDeleteCells – удаляет выделенные ячейки. Если IP находится вне таблицы, возникает ошибка. У этого оператора может быть аргумент, который существенно расширяет его возможности:
TableDeleteCells.ShiftCells = число
0 или опущено – после удаления ячейки, остальные сдвигаются влево;
1 – сдвигать вверх;
2 – удалить целиком строку;
3 – удалить целиком столбец.
 
Примеры:
 
1. Оставить в таблице 10 последних строк.
 
TableSelectTable
StartOfRow
While SelInfo(15) > 10 Then
TableDeleteRow
Wend
 
2. Добавить строку в конец таблицы.
 
TableSelectTable
CharRight
TableInsertRow
 
3. Выделить четыре строки таблицы.
 
For i = 1 To 4
   TableSelectRow
   LineDown
Next i
 
Следующие два примера представляют собой часть макрокоманд для удаления строки или столбца без их предварительного утомительного выделения.
 
4. Удаление столбца.
 
If SelInfo(12) <> -1 Then Stop
TableDeleteColumn
 
5. Удаление строки.
 
If SelInfo(12)<> -1 Then Stop
TableDeleteRow
 
Перевод текста в таблицу
 
Оператор FieldSeparator и функция FieldSeparator$()
 
Оператор FieldSeparator$ устанавливает символ-разделитель, заданный аргументом Разделитель$, для того, чтобы можно было распределить текст по ячейкам таблицы при выполнения оператора TextToTable. Так если у вас данные разделены в тексте знаком(!), то перед конвертированием в таблицу следует выполнить макрос с оператором FieldSeparator$
"!".
Функция FieldSeparator$() возвращает текущее значение символа-разделителя.
 
Синтаксис:
 
FieldSeparator$ Разделитель$
 
FieldSeparator$()
 
Пример.
 
Сначала проверяется текущее значение разделителя полей. Если разделителем служит знак %, то преобразовать текст в таблицу, иначе сохранить текущее значение, изменить его на %, конвертировать, после чего восстановить сохранённое значение.
 
Sub MAIN
If FieldSeparator$() = "!" Then
TextToTable
Else
fs$ = FieldSeparator$()
FieldSeparator$ "!"
TextToTable
FieldSeparator$ fs$
End If
End Sub
 



Операции над закладками


Оператор EditBookmark позволяет вам создать (удалить или перейти на) собственную закладку для места, где находится IP. Особенно часто нужны временные закладки, действующие только во время работы макрокоманды:
EditBookmark .Name = "tmp", .Add

Задание. Разберите пример использования этого оператора, приведённый в Справке к WinWord 7.0.
Оператор EditBookmark полностью соответствует опциям диалогового окна "Закладка" (Правка·Закладки...). Поэтому, созданные им закладки появятся в этом окне и будут доступны через меню WinWord. Формат оператора:
EditBookmark .Name=текст,[SortBy=число][,.Add][,.Delete][,.GoTo]

Аргумент





Аргумент
Назначение
SortBy
Задаёт порядок сортировки закладок при их выводе в списках: по алфавиту (0), по местоположению (1)
Add
Добавить закладку (значение по умолчанию, если другие аргументы не заданы)
Delete
Удалить закладку
GoTo
Переместить точку вставки по местоположению закладки


Операторы SetStartOfBookmark и SetEndOfBookmark помечают соответственно начало и конец выделенного элемента текста. Например:
myMark$ = "StartPoint"
SetStartOfBookmark "\Sel", myMark$
myMark1$ = "EndPoint"
SetEndOfBookmark "\Sel", myMark1$
.....
EditGoTo .Destination = myMark$
 
Предлагаемая в Справке
форма записи:
SetEndOfBookmark "\Sel", "EndPoint"
по непонятной для меня причине не работает.
 
Число закладок в документе возвращает функция Countbookmarks(), их имена – функция BookmarkName$(номер). Аргументом этой функции является номер
закладки в списке закладок документа (принимает значения от 1 до n, где n – общее число закладок в документе). Если аргумент функции не задан, возникает ошибка. Закладки следуют в этом списке в том порядке, в каком они встречаются в документе. Чтобы получить этот список, можно воспользоваться макрокомандой, приведённой в Справке. Обратите внимание, что массив в этом примере создаётся динамически.

Sub MAIN
всегоЗакладок = CountBookmarks()
размерМассива = всегоЗакладок - 1
Dim Закладки$(размерМассива)
For n = 0 To размерМассива
  Закладки$(n) = BookmarkName$(n + 1)
  MsgBox Закладки$(n)
Next n
End Sub
 
Функция GetBookmark$ (имя) считывает неформатированный текст, помеченный указанной закладкой. Если имя не является именем закладки в активном документе, то возвращается пустая строка.
Примеры:
1. Использование закладки /Cell и функции GetBookmark$ позволяет считать в переменную содержимое ячейки таблицы.
A$ = GetBookmark$("\Cell")
 
2. Считать в переменную second$ текст второй закладки документа.
second$ = GetBookmark$(BookmarkName$(2))
3. Считать в переменную текст абзаца, содержащего точку вставки.
текстАбзаца$ = GetBookmark$("\Para")
4. Текущую страницу (абзац, строку) документа можно выбрать с помощью команды EditGoTo с аргументом "\Page" (соответственно "\Para", "\Line"). При этом выделяется текущая страница (абзац, строка) целиком.
Sub MAIN
EditGoTo "\Page"
End Sub
 
Другая функция, CmpBookmarks(Закладка_1, Закладка_2), сравнивает две закладки и возвращает число соответствующее относительному положению и размерам закладок. Она используется для того чтобы организовать выполнение макрокоманды внутри определенного участка текста.
Интересны значения,
возвращаемые этой функцией сравнения:
0 – Закладка_1 и Закладка_2 эквивалентны;
1 – Закладка_1 полностью ниже Закладки_2;
2 – Закладка_1 полностью выше Закладки_2;
3 – Закладка_1 ниже и внутри Закладки_2;
4 – Закладка_1 внутри и выше Закладки_2;
5 – Закладка_1 включает в себя Закладку_2;
6 – Закладка_2 включает в себя Закладку_1;
7 – Закладка_1 и Закладка_2 начинаются в одной точке, но Закладка_1 длиннее;
8 – Закладка_1 и Закладка_2 начинаются в одной точке, но Закладка_2 длиннее;
9 – Закладка_1 и Закладка_2 заканчиваются в одной точке, но Закладка_1 длиннее;
10 – Закладка_1 и Закладка_2 заканчиваются в одной точке, но Закладка_2 длиннее;
11 – Закладка_1 расположена ниже и примыкает к Закладке_2
12 – Закладка_1 расположена выше и примыкает к Закладке_2
13 – одна из двух закладок не существует.
 
!!!Оператор InsertBookmark
– в Word 6.0 не существует.
Функция EmptyBookmark(Имя$) позволяет проверить, "пустая" закладка или нет. Пустая закладка определяет только местоположение для точки вставки в документе, но не помечает какой-либо текст. Функция возвращает -1, если закладка пустая, 0, если не пустая или не существует.
Существование закладки можно проверить с помощью функции ExistingBookmark(Имя$). Аналогично, она возвращает -1, если закладка существует, 0, если нет.
 

Оператор CopyFile


CopyFile позволяет переписать указанный файл в другой каталог. Синтаксис и работа этого оператора аналогичны команде COPY в MS-DOS.
Синтаксис:

CopyFile ИмяФайла$, Каталог$
 
Если в аргументе ИмяФайла$ не указан дисковод или имя файла, то он копируется из текущего каталога. В параметре Каталог$ следует указать полный путь до данного каталога. Если в каталоге, куда копируется файл, уже существует файл с таким же именем, то появится запрос, хотите ли вы его заменить.
Следующая макрокоманда скопирует файл WINBAS3.DOC из каталога C:\EDWARD в каталог A:\SAVE:
 
Sub MAIN
CopyFile "C:\edward\winbas3.doc", "A:\save"
End Sub
 
GetAttr()
 
Программирование диалогов (Занятие №5)
 
Начнём как обычно с примера из повседневной жизни. Мне потребовалось “втащить” в Word файл из базы данных, в которой записи состояли из двух полей: текстового и числового. Так как записи между собой ничем не разделены и имеют разную длину, то разделить их могла помочь только макрокоманда. Вручную это заняло бы неделю. Вот эта макрокоманда, по примеру которой вы можете решать свои задачи подобного типа.
В ней по всему тексту ищется начало строки, начинающейся с прописной латинской буквы "A". Затем проверяется, предшествует ли найденной букве цифра и, если "да", между ними вставляется символ "возврат каретки". Затем всё повторяется для следующей буквы алфавита и т. д.
Sub MAIN
For i = 0 To 25
StartOfDocument
While Not AtEndOfDocument()
  EditFind .Find = Chr$(65 + i), .MatchCase = 1, .WholeWord = 0
  If EditFindFound() = - 1 Then
     CharLeft 2, 0 ' выделить предшествующий знак
     CharRight 1, 1
     b$ = Selection$()
     CharRight 1, 0
     If (B$ >= "0") And (B$ <= "9") Then Insert Chr$(10)
     CharRight 3, 0  ' продолжить поиск
  Else
     Goto eloop
  EndIf
 Wend
eloop:
 Print i
 Next i
End Sub
В отличие от профессионального программирования, на языке WordBasic приходится писать от случая к случаю, когда в этом возникает реальная потребность.
Поэтому детали языка, содержащего в последней версии более 600 операторов, забываются и под рукой желательно иметь какой-либо справочник, в частности, WordBasic Reference. К сожалению, этот встроенная справочная система в Word 7 для Windows 95 (как в Word 6.0) не переведена на русский язык при локализации, тем не менее, я рекомендую обязательно указывать её при инсталляции этого пакета.
Второй процесс, доставляющий немало мучений -- отладка макрокоманды. Для отладки следует загрузить в качестве тестового примера фрагмент или копию документа, к которому вы хотите применить разрабатываемый макрос. Как правило работа макрокоманды очень наглядна из-за перемещения курсора, выделения, удаления и вставок текста и других действий. Поэтому макрокоманду удобно отлаживать в пошаговом режиме предварительно выбрав в меню Окно
пункт Расположить все. Тогда в двух окнах на экране одновременно видно и исполняемую строку макрокоманды и результат её действия над текстом документа.
Следующая макрокоманда позволяет выделить полезную информацию из строки, где ей предшествует нечто, обозначенное в строке поиска как признак1, а после неё следует признак2, например так:
Всё что угодно
признак1нужные данные признак2 всё что угодно
Обратите внимание на работу операторов StartOfLine и EndOfLine с признаками выделения текста.
Sub MAIN
StartOfDocument
 While Not AtEndOfDocument()
  StartOfLine
  EditFind .Find = "признак1", .Direction = 0, \
      .WholeWord = 0, .MatchCase = 1
  If EditFindFound() Then
    EditCut
    StartOfLine 1
    EditCut
  End If
  EditFind .Find = "признак2", .Direction = 0, \
      .WholeWord = 0, .MatchCase = 1
  If EditFindFound() Then
     EditCut
     EndOfLine 1
     EditCut
  End If
  LineDown
 Wend
End Sub
На третьем занятии были кратко рассмотрены операторы Print и MsgBox, используемые для взаимодействия с пользователем из макрокоманды.
Оператор Print может применяться для вывода в файл, на принтер или, по умолчанию, в строку статуса на экране.


Синтаксис оператора Print при выводе в строку статуса:
Print ИмяПеременной1[$],ИмяПеременной2[$], ...
Например:

Sub Main
  Print "Лена"
  A$="Наташа"
  Print A$
End Sub

Результат работы первого оператора Print можно увидеть только при пошаговом выполнении этой макрокоманды, потому что он остаётся в ней до выполнения следующего оператора Print. Чтобы избежать этого, между ними следует вставить операторы задержки времени, например ничего не делающий цикл.
 
Sub MAIN
  Print "Лена"
  For i = 0 To 4096 : Next
  A$ = "Наташа"
  Print A$
End Sub
 
Операнды оператора
Print могут разделяться точкой с запятой, запятой или соединяться с помощью операции конкатенации (сцепления). Если операнды отделены друг от друга запятыми, то при печати между ними вставляется символ табуляции. Следующая макрокоманда показывает как используется конкатенация:
Sub Main
  ИмяДевочки$ = "Оля"
  ИмяМальчика$ = "Саша"
  Print ИмяДевочки$ + " и " + ИмяМальчика$ + " пошли на танцы."
End Sub
 

 
В реальной жизни конкатенация используется для печати более прозаических сообщений. Вот пример макрокоманды, выводящей строку на LPT1.
 
Sub MAIN
  x = SelInfo(27)
  If x = - 1 Then MsgBox "Текущее окно – окно макросов!"
  Open "lpt1.dos" For Output As #1
  Print #1, "Вывод строки на печать"
End Sub
Первые две строчки позволяют избежать получения сообщения об ошибке “Command is unavailable” при выполнении макрокоманды, если активное окно – это окно редактирования макрокоманд. Эта проблема возникает из-за того, что некоторые макрокоманды не могут выполняться, если активным окном является окно макрокоманд.
Наиболее удобно то, что в операторе Print можно перемешивать в списке операндов строковые переменные с числовыми и числами. Часто для отладки выводятся сообщения типа:
Print "Преременная Name = "; Name; "Index =
"; Index


При этом строка статуса примет следующий вид:
 

 
Наконец, как и в обычном Бейсике операндами Print могут быть арифметические выражения, функции, выражения с функциями и т. п.
Теперь рассмотрим более интересный оператор MsgBox, позволяющий получать фиксированные ответы пользователя. Оператор и функция MsgBox, выводит только символьные строки. Синтаксис оператора MsgBox:
MsgBox сообщение$ [,заголовок$] [,тип]
 
где, сообщение$ -- это выводимый текст, необязательный заголовок$, , -- заголовок окна, в котором выводится сообщение. Если она опущена, то заголовок окна - "Microsoft Word". Например:
  MsgBox "Удалить абзац?", ,3
 

 
<рис.>
Третий операнд делает оператор MsgBox более гибким и полезным.
Этот операнд формируется как сумма двух слагаемых: кода числа кнопок и кода выводимой в окне пиктограммы.
Код числа и значений выводимых в окне клавиш
0 - OK (по умолчанию)
1 - ОК, Отмена,
2 - Прервать, Повторить, Пропустить
3 - Да, Нет, Отмена
4 - Да, Нет
5 - Повторить, Отмена
Код выводимой в окне пиктограммы
0  - не выводится ничего (по умолчанию)
16 - знак "Stop"
32 - знак вопроса (?)
48 - восклицательный знак (!)
64 - пиктограмма "Информация" (i)
 

 
Код кнопки, принятой по умолчанию
0   - первая кнопка (по умолчанию)
256 - вторая кнопка
512 - третья кнопка
Если в качестве третьего операнда задать числа -1, -2 или -8, то вывод информации, как и в операторе Print будет осуществляться в строку статуса, но выведенный текст не исчезнет сразу, а сохранится до выполнения некоторого условия:
-1 - сообщение сохраняется до вывода следующего сообщения (и необязательно в строку статуса);
-2 - до нажатия клавиши на клавиатуре или кнопки мыши;
-8 - как и -2, но на полную строку статуса.
Функция MsgBox() отличается от оператора MsgBox тем, что возвращает значение нажатой кнопки:
-1 - нажата левая кнопка (первая);
 0 - средняя (вторая);
 1 - третья.
Ввод ответов в макрокоманду, когда нажатия кнопок в MsgBox недостаточно, можно осуществить и с помощью оператора InputBox$, который имеет следующий синтаксис:
Inputbox$ (подсказка$, [заголовок$],[по_умолчанию$])
где
подсказка$ - текст, выводимый в окне запроса;
заголовок$ - заголовок окна запроса;
по_умолчанию$ - значение по умолчанию, которое макрокоманда предлагает пользователю.
WordBasic позволяет создавать очень сложные диалоговые окна. Делается это либо “вручную” – с помощью соответствующих операторов, имеющих, как правило, множество параметров, либо с помощью редактора диалогов.
последнее предпочтительнее и нагляднее.
 

Оператор DrawSetInsertToTextbox



Перемещает точку вставки в область текста в заданном текстовом окне или пояснении в рисованном объекте. Попытка вставить текст в другие места рисованного объекта приводит к сообщениям об ошибке.
 
Синтаксис:
DrawSetInsertToTextbox [номер_объекта]
 
Аргумент указывает, что за объект выбран.
0 – объект выделен
>0 – объект, якорь которого находится в диапазоне установленном с помощью оператора DrawSetRange.
Пример.
 
DrawSetRange "\Page"
If DrawGetType(2)= 3 Then
DrawSetInsertToTextbox 2
Insert "Текст, заполняющий текстовый блок"
End If
 
Оператор DrawSetInsertToAnchor
 
Перемещает точку вставки в начало абзаца, к которому “привязан” заданный рисованный объект.
Синтаксис:
 
DrawSetInsertToAnchor [номер_объекта]
номер_объекта – трактуется как и у предыдущего оператора.
 
Оператор InsertDrawing
 
Если у вас на машине установлен пакет Microsoft Draw, этот оператор запускает его на выполнение, тот загружается и выводит пустое окно для рисования. После окончания работы с Microsoft то, что вы в нём создали, вставляется в ваш активный документ. Как указано в Справке оператор InsertDrawing аналогичен оператору InsertObject .Class = "MSDraw".
 



Оператор DrawSnapToGrid


 
Устанавливает сетку для рисованного объекта.
 
Синтаксис:
 
DrawSnapToGrid .SnapToGrid = число [, .XGrid = число1 или текст] [, .YGrid = число или текст] [, .XOrigin = число или текст] [, .YOrigin = число или текст]
 
Пример.
 
Sub MAIN
DrawSnapToGrid .SnapToGrid = 2, .XGrid = "2 in", .YGrid = "2 in",\ .XOrigin = "2 in", .YOrigin = "1 in"
End Sub
 
 



Оператор EditFindLang



Когда следует за оператором EditFind или EditReplace, в которых аргумент .Format=1, задаёт язык, которым отформатирован текст, который вы хотите найти (оператор Language (меню Сервис) перечисляет имена языков в их английском написании).
EditReplaceLang .Language = "Deutsch"
 
EditFindPara .LeftIndent = "1 in"
EditReplacePara .LeftIndent = "2 in"
 
EditReplace .Find = "", .Replace = "", .Format = 1, \
      .ReplaceAll, .Wrap = 1
 
Приведенная ниже макрокоманда заменяет символ табуляции в начале строки принятым в WinWord стандартным отступом.
 
Sub MAIN
StartOfDocument
EditFind .Find = "^t"
While EditFindFound()
DeleteWord
LineDown
StartOfLine
EditFind
Wend
End Sub
 
Полезная макрокоманда: убрать по всему документу выделение текста полужирным шрифтом. Аналогично делается макрос, убирающий выделение курсивом или любое другое.
 
Sub MAIN
StartOfDocument
While AtEndOfDocument() <> - 1
WordRight
SelectCurWord
If Bold() <> 0 Then Bold 0
ShrinkSelection
Wend
End Sub
 



Оператор FileCloseAll


 
Закрывает все открытые файлы.
 
Синтаксис:
 
FileCloseAll [Save]
 
Пример.
 
Откроем два файла и закроем их.
 
Sub MAIN
FileNewDefault
Insert "Тестовая строка для первого файла."
FileNewDefault
Insert "
Тестовая строка для второго файла."
FileCloseAll 0
End Sub
 
Оператор FileSave сохраняет активный документ или шаблон. Если документ без имени, FileSave выводит на экран диалоговое окно Сохранить как.
 
Пример:
 
Sub MAIN
FileNewDefault
Insert "Тест №1 оператора FileSave"
FileSave
MsgBox "Окно <Сохранить как> не должно появиться.", - 1
Insert Chr$(13) + "Тест № 2 оператора FileSave . "
FileSave
End Sub
 
FileSaveAll [соханять][,в_формате]
первый аргумент задает второй (в_формате)
 
Функции IsDocumentDirty() возвращает -1, если документ изменялся после последнего его сохранения. Обычно используется в сочетании с оператором FileSave:
 
If IsDocumentDirty() = -1 Then FileSave
 
Для шаблонов существует аналогичная функция IsTemplateDirty().
 
Документы, шаблоны и др.
 
AddAddIn, AddAddIn()
AddInState, AddInState()
ClearAddIns
Converter$()
ConverterLookup()
CopyFile
CountAddIns()
CountDocumentVars()
CountFiles()
CountFoundFiles()
DeleteAddIn
DisableInput
DocClose
DocumentStatistics
FileConfirmConversions, FileConfirmConversions()
FileFind
FileList
Функция FileName$() возвращает имя файла документа и путь. Следующая макрокоманда поместит полное имя файла туда, где находится точка вставки (IP).
 
Sub MAIN
fn$=FileName$()
Insert fn$
End Sub
 
Следует учесть, что если IP находится внутри верхнего или нижнего колонтитула, то вставка имени файла не производится, так как Word рассматривает колонтитулы как отдельные от окна документа окна и функция FileName$() не знает, какое имя вернуть.
 
FileNameFromWindow$()
FileNameInfo$()
FileNew
FileNewDefault
 



Оператор FontSubstitution


 
Синтаксис:
FontSubstitution .UnavailableFont = текст1, .SubstituteFont = текст2
 
устанавливает опцию отображения шрифта для активного документа. Аргументы оператора FontSubstitution соответствуют диалогового окна Font Substitution (Compatibility tab, диалоговое окно Параметры, меню Сервис).
 
Аргументы:
UnavailableFont – имя шрифта, отсутствующего на вашем компьютере, который вы хотите заменить другим шрифтом для вывода на экран и на печать;
SubstituteFont – имя шрифта, имеющегося на вашем компьютере, которым заменяется отсутствующий шрифт.
 
 



Оператор InsertField



Вставляет заданное поле в точку вставки (IP).
 
Синтаксис:
InsertField .Field = текст
 
Аргумент
.Field тип поля и инструкция по вставке. Чтобы получить информацию о каждом конкретном поле, включая синтаксис и примеры выберите это поле в диалоговом окне Поле
меню Вставка, а затем нажмите клавишу F1. Аргумент Field может быть длинной до 255 знаков. Не включайте в текст
фигурные скобки. Для вставки в текст
кавычек используйте Chr$(34).
Оператор InsertFieldChars вставляет в IP символы поля, т.е. фигурные скобки ({}), а затем позиционирует IP между символами поля.
 



Оператор LockDocument и функция LockDocument()


 
Sub MAIN
  If SelInfo(27) = - 1 Then FileNew
  ViewMasterDocument
  Insert "This is a Master document"
  InsertPara
  FileSaveAs .Name = "C:\MACROMST.DOC", .AddToMru = 1
  CreateSubdocument
  LineDown 2
  LineUp 1
  Insert "Это поддокумент 1."
  FileSaveAs .Name = "C:\MSSUB1.DOC", .AddToMru = 1
  LineDown 2
  CreateSubdocument
  LineDown 1
  Insert "Это поддокумент 2."
  FileSaveAs .Name = "C:\MSSUB2.DOC", .AddToMru = 1
  LineUp 3
  MsgBox "Word will now lock sub document1. Note the padlock on the left."
  LockDocument
  If LockDocument() = - 1 Then
  MsgBox "The File is now locked. Нажмите OK, чтобы возобновит demo."
  MsgBox "Теперь Word разблокирует поддокумент 1."
  MsgBox "Note the padlock is no longer there."
  LockDocument
  FileClose 1
  Kill "C:\MACROMST.DOC"
  Kill "C:\SUB1.DOC"
  Kill "C:\SUB2.DOC"
End Sub
 



Оператор OutlineShowFormat



Выводит символ в режиме просмотра структуры или, если форматирование символа уже показано на экране, прячет его. Если активный документ не в режиме просмотра структуры документа или не главный документ, возникает ошибка.
 
Синтаксис:
 
OutlineShowFormat
 
Пример.
 
Переключает форматирование символов в и из Разметка страницы (меню Вид):
 
Sub MAIN
On Error Goto notolview
OutlineShowFormat
Goto exit
notolview:
MsgBox "Чтобы переключиться на просмотр структуры документа используйте команду OutlineShowFormat"
exit:
End Sub
 



Оператор SymbolFont



Форматирует выделенный текст шрифтом
Symbol или помещает в точку вставки заданную его аргументом строку текста, отформатированную этим шрифтом. Если нет выделенной области и не задан аргумент, то никаких действий не производится. Честно говоря, я не знаю зачем в язык введён этот оператор, так как практического применения ему пока не нашёл.
 
Синтаксис:
 
SymbolFont [Вставляемый_в_документ_текст]
 
Пример.
 
Чтобы посмотреть, как работает эта макрокоманда выделите строку текста и выполните макрокоманду, затем переместите куда-нибудь точку вставки и снова запустите макрос.
 
Sub MAIN
SymbolFont "Тестовая строка."
End Sub
 
С этим шрифтом связан более осмысленный оператор, который называется InsertSymbol. Он позволяет вставить в текст по месту IP отдельный специальный символ из набора декоративных шрифтов (например, стрелку специального вида и т.п.):
Синтаксис:
 
InsertSymbol .Font = "имя_шрифта", .Tab = число, CharNum = "код_символа"
 
где:
имя_шрифта – название гарнитуры (см. пример), содержащей вставляемый символ. Названия шрифтов можно посмотреть в диалоговом окне Символ, если выбрать в меню Вставка пункт Символ;
число – задаёт вид табуляции для некоторого специального случая (см. Справку);
код_символа – номер символа в таблице символов данного шрифта, считая слева направо, плюс 31 (из-за того что в этой таблице не показаны непечатаемые символы). Обратите внимание, что число символов в строке таблицы равно 28, а не 32, как принято у программистов при построении таких таблиц. Почему так через голову сделано, догадаться невозможно. Логика ребят из Microsoft иногда совершенно убойная.
 
Пример.
InsertSymbol .Font = "Symbol", .CharNum = "96"
 
Скрытый текст
 
Оператор Hidden и функция Hidden() позволяют работать со скрытым текстом.
 
Синтаксис:
 
Hidden [Argument]
 

Аргумент
Пояснение
1
Включить форматирование “скрытый текст”
0
Удалить форматирование “скрытый текст”
Опущен
Переключает форматирование на противоположное

 
Пример.
 
Сделать скрытым выделенный фрагмент текста:
 
Sub MAIN
Insert "Тестовая строка"
StartOfLine 1
Hidden 1
End Sub
 



Оператор ToolsAddRecordDefault


 
Добавляет пустую запись к концу источника данных. Если это таблица, то добавляет строку внизу таблицы.
 
Оператор
 
ShadingPattern Тип
ShadingPattern()
 
Пример.
 
Вставить в документ таблицу и добавить тень к первой строке.
 
Sub MAIN
StartOfDocument
TableInsertTable .NumRows = 5, .NumColumns = 3
StartOfDocument
TableSelectRow
MsgBox "Shading is off and ShadingPattern() returns a" +\
Str$(ShadingPattern())
ShadingPattern 17
MsgBox "Shading is on and ShadingPattern() returns a" +\
Str$(ShadingPattern())
StartOfDocument
End Sub
 



Оператор ToolsBulletListDefault


 
Синтаксис:
 
ToolsBulletListDefault
 
Пример.
 
Отформатировать выделенный текст в виде списка, поставив перед каждым его элементом символ по умолчанию (жирную точку):
 
Sub MAIN
ToolsBulletListDefault
End Sub
 



Оператор 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
 

Оператор ToolsRemoveRecordDefault



Этот оператор удаляет запись БД, на которой в момент его исполнения находилась точка вставки. В частности удаляет строку таблицы, если БД находится в таблице.
 
Пример.
Создать набор полей, а затем удалить запись в которой находится IP.
 
Sub MAIN
     TableInsertTable .NumRows = 2, .NumColumns = 3
StartOfTable
     Insert "Ф.И.О." : NextCell : Insert "Адрес" : NextCell
     Insert "Телефон" : NextCell : Insert "Виктор Бегтин": NextCell
     Insert "Москва" : NextCell : Insert "123-4567"
     ToolsRemoveRecordDefault
End Sub
 



Оператор ViewBorderToolbar


 
Пример макрокоманды, активно использующей закладки
Sub MAIN
If Len(Selection$()) = 1 Then
EditGoTo .Destination = "\Para"
EndIf
ToolsBulletsNumbers .Type = 0, .Replace = 1, .Remove
InsertBookmark .Name = "bulletselection"
CharLeft 1
n = CmpBookmarks("\Sel", "bulletselection")
While n = 8 Or n = 6
CharRight 1, 1
If Asc(Selection$()) = 9 Then
EditClear
Else
CharLeft 1
EndIf
Insert "X"
CharLeft
ToolsBulletListDefault EditClear
EndOfLine
n = CmpBookmarks("\Sel", "\EndOfDoc")
If n <> 0 Then
ParaDown
StartOfLine
n = CmpBookmarks("\Sel", "bulletselection")
EndIf
Wend
EditGoTo .Destination = "bulletselection"
InsertBookmark .Name = "bulletselection", .Delete
End Sub
 



Оператор ViewOutline



Оператор ShowHeading
 
В режиме просмотра структуры документа показывает все заголовки до заданного уровня включительно. Прячет подчинённые заголовки и текст.
 
Синтаксис:
 
ShowHeading Число
 
Число – целое число от 1 до 9. Это не параметр так как пишется слитно, а на самом деле 9 разных операторов, каждый для своего уровня заголовков. Сделано так очевидно для сокращения времени выполнения оператора (для его анализа требуется меньше действий). Недостаток лишь в том, что вместо числа
здесь нельзя задать переменную.
 
Пример. См. Справку.
 
Оператор ShowAllHeadings
 
В режиме просмотра документа показывает текст и заголовки. Перед ним по невнятной причине рекомендуют ставить оператор ShowHeading9.
 
Пример.
 
Перейти в режим просмотра структуры документа и установить режим вывода на экран всего текста:
 
Sub MAIN
ViewOutline
ShowHeading9
ShowAllHeadings
End Sub
 



Оператор ViewToggleMasterDocument


 
Синтаксис:
 
ViewToggleMasterDocument
 
Пример.
 
Макрокоманда переключает новый документ между режимами “Структура документа” и “Главный документ”.
 
Sub MAIN
FileNewDefault
ViewOutline
MsgBox "Выберите OK, чтобы перейти в режим Главного документа."
ViewToggleMasterDocument
MsgBox "OK, чтобы вернуться в режим Структура документа."
ViewToggleMasterDocument
End Sub
 



Оператор WindowNewWindow



Синтаксис:
 
WindowNewWindow
 
Пример.
 
Эта макрокоманда создаст новый документ, базирующийся на шаблоне NORMAL, открывает копию другого окна, а затем упорядочивает их на экране:
 
Sub MAIN
FileNew .Template = “Normal”
Insert “Это образец текста.”
WindowNewWindow
WindowArrangeAll
End Sub
 
Документ в окне можно максимизировать или минимизировать и, что иногда более важно, задать размеры (в пунктах) самого окна.
Оператор DocMaximize позволяет увеличить активное окно с документом до максимального размера в окне WinWord. Функция DocMaximize() возвращает значение -1, если окно максимизировано, и 0, если нет. Аналогично работают оператор DocMinimize и функция DocMinimize(), только в отношении минимизации окна документа.
Оператор DocRestore не имеет операндов. Он восстанавливает размеры окна документа, если оно был максимизировано или минимизировано. Например:
 
If DocMinimize() <> 0 Then DocRestore
 
Окно документа можно из макрокоманды разделить на два отдельных окна, чтобы увидеть на экране две его разных части, либо произвести перетаскивание кусков текста из одной части в другую. Это действие эквивалентно выбору пункта Разбить в меню Окно.
Оператор DocMove высота, ширина позволяет переместить активное в позицию, заданную его аргументами. Значения указываются в пунктах (1 пункт = 1/72 дюйма, мм). Начало координат (0,0) в верхнем левом углу экрана. Например,
If DocMaximize() = 0 Then DocMove 15, 35

перемести окно на 15 пунктов вправо и на 35 пунктов вниз, соответственно DocMove 0,0 перемещает его к левому краю экрана. Подробно это будет показано на примере.
Оператор DocWindowHeight высота устанавливает высоту окна, а функция DocWindowHeight() возвращает высоту активного окна. Аналогично оператор DocWindowWidth ширина и функция DocWindowWidth() работают с его шириной. Существует оператор, позволяющий сразу установить размеры окна:

            DocSize ширина, высота
Несколько других операторов позволяют перемещать активное окно документа или его пиктограмму в пределах рабочей области.
Оператор DocWindowPosLeft позиция
даёт возможность переместить его на расстояние позиция
от левого края рабочей области. Если активное окно максимизировано, то выдаётся сообщение об ошибке, так как операция не может быть выполнена. Функция DocWindowPosLeft() возвращает величину этого расстояния.
Оператор DocWindowPosTop позиция и функция DocWindowPosTop() аналогичны DocWindowPosLeft, только отсчёт идёт от верхнего края рабочей области.
 
Пример, заимствованный из Справки:
 
Sub MAIN
по_горизонтали = DocWindowPosLeft()
по_вертикали = DocWindowPosTop()
MsgBox "От левого края:" + Str$(по_горизонтали) + Chr$(13) + \
  "Пунктов от верхнего края:" + Str$(по_вертикали), "Позиция окна документа"
r = DocWindowHeight()
Print r
End Sub
 
Несколько операторов WordBasic служат для работы с панелями окна, при разбиении окна документа на две части (аналог Окно*Разбить, Окно*Удалить разбиение).
Разбиение окна выполняется с помощью оператора DocSplit. В качестве его аргумента задаётся процент от высоты окна, где следует произвести разбиение. Так аргумент равный 50 делит окно документа пополам. Хотя аргумент и может принимать значения от 0 (отсутствие разбиения) до 100, следует избегать значений, близких к концам этого интервала. Уже при 90%, например следующая макрокоманда начнёт выдавать сообщение об ошибке.
DocSplit 91
OtherPane
ClosePane

Оператор OtherPane переносит точку вставки (IP) из одной панели в другую, ClosePane – закрывает панель (удаляет разбиение).
Две вспомогательные функции помогают определить имеется ли разбиение документа и как поделено его окно. Функция WindowPane() возвращает 0, при отсутствии разбиения, 1 – если IP находится в верхней панели, и 3, если IP – в нижней. Функция DocSplit() возвращает 0, если окно документа не разделено, а иначе процентное отношение в котором разделение поделило окно документа.
 
Оператор
Activate имеет следующий формат:
Activate ЗаголовокОкна, [НомерПанели]



Он переносит открытый документ Word, шаблон или макро в верх хипа. Проще говоря, при работе с несколькими документами, окно с указанным в Activate именем становится активным. Например, вы хотите открыть ещё один документ, но продолжить при этом работу с предыдущим. Для этого сохраним его имя в переменной первоеокно$, загрузим нужный файл, а затем снова сделаем первое окно активным:
первоеокно$ = WindowName$()
FileOpen "CHAP2.DOC"
Activate первоеокно$

Этот результат, конечно же, можно получить и другим способом. Подумайте как.
Необязательный аргумент НомерПанели активизирует верхнюю панель окна (если оно разделено на несколько частей) при значениях 1 или 2, либо нижнюю панель при значениях 3 или 4. В остальных случаях возникает ошибка 512. Значение аргумента ЗаголовокОкна должно совпадать с одним из имён в списке пункта Окно, главного меню. Следует учесть, что при смене каталога имена в этом списке изменяются, так как к ним добавляется путь.
 

Операторы блокирования и обновления полей



Оператор LockFields блокирует поле от последующего обновления, предохраняя таким образом от изменений поля, связанные, например, с датой и временем чего-либо.
Оператор UnlockFields отменяет действие оператора LockFields.
Оператор UnlinkFields заменяет поля, попавшие в выделенный блок текста, их наиболее недавними значениями, а само поле преобразуется в обычный текст, а потому не может быть в дальнейшем автоматически обновлено. Некоторые поля (в частности, задающие элементы оглавления и индекса) не могут быть отсоединены. Так как после операции отсоединения поля не могут быть восстановлены, то применение этого оператора достаточно очевидно: при передаче готового материала убрать весь инструментарий.
Пример. Отсоединить все поля в активном документе, предварительно обновив их значения.
 
EditSelectAll
UpdateFields
UnlinkFields
 
Оператор
UpdateFields – Обновляет выбранные поля. Полезна следующая макрокоманда:
 
Sub MAIN
EditSelectAll
UpdateFields
End Sub
 
Оператор UpdateSource сохраняет в исходном документе изменения, сделанные в результате работы поля INCLUDETEXT. Исходный документ должен быть отформатирован как документ Word.
 



Операторы Bold, Italic, Underline и Strikethrough


 
Italic [On]                           курсив
Bold [On]                           полужирный
Underline [On]                    подчеркивание текста
Strikethrough [On]              перечёркивание текста
 
Перечисленные операторы доступны также и в виде соответствующих функций.
 
Bold                                  Bold()
Underline                            Underline()
Strikethrough                      Strikethrough()
Italic                                   Italic()
 
Пример.
 
Проверить, отформатирована ли выделенная область полужирным шрифтом, и если нет. то она форматировать её. Поместив вместо оператора bold, любую из приведенных выше пар оператор – функция, вы получите макрокоманду, демонстрирующую их работу.
 
Sub MAIN
A = Bold()
If A < 1 Then
MsgBox "Выделить полужирным."
Bold
Else
MsgBox "Текст отформатирован полужирным."
End If
End Sub
 
WordUnderline [On] – подчёркивание слов (пробелы между ними не подчёркиваются).
DoubleUnderline [On] – двойное подчеркивание текста.
DottedUnderline [On] – подчеркивание текста пунктирной линией.
Этим операторам соответствуют функции Italic(), Bold(), Underline(), WordUnderline(), DoubleUnderline() и DottedUnderline().
Гораздо более интересны операторы и функции, позволяющие менять сам шрифт и его атрибуты (размер, цвет, кернинг и т. д.):
Оператор Font$ имя$
[, размер] – применяет заданный шрифт указанного размера к выделенному тексту.
FontSizeSelect – если панель Форматирование присутствует на экране, то указатель перемещается в окошко с размерами шрифтов. Если этой панели на экране нет, то появляется диалоговое окно Шрифт, в котором маркер устанавливается на окно размера шрифта.
Функция FontSize()
– возвращает размер шрифта выделенного текста.
 
Пример.
 
Эта макрокоманда возвращает размер шрифта для выделенного участка и позволяет пользователю изменить этот размер.
 
Sub MAIN
fs = FontSize()
MsgBox “Шрифт ” + Str$(fs) + “пунктов”

FontSizeSelect
End Sub
 
Функция Font$() – возвращает имя шрифта выделенного текста. Если этот текст оформлен несколькими шрифтами, то возвращается пустая строка.
Font$(номер-шрифта) – возвращает имя шрифта, номер которого в списке шрифтов, доступных для выбранного, принтера равен номеру-шрифта. Число таких шрифтов можно получить с помощью функции CountFonts(). Следующий макрос возвращает полный список шрифтов.
 
Sub MAIN
      For i=1 To CountFonts()
      Insert Font$(i)
      InsertPara
End SUB
 
GrowFont – увеличивает размер шрифта выделенного текста до следующего размера, поддерживаемого выбранным принтером. Если в выделенном тексте используются шрифты разного размера, то каждый из них увеличивается до следующего доступного размера. Если выделенного текста нет, то новый размер шрифта будет применяться к добавляемому тексту. ShrinkFont – симметричный к GrowFont оператор, аналогичным образом уменьшающий размер шрифта.
Операторы GrowFontOnePoint и ShrinkFontOnePoint позволяют соответственно увеличивать и уменьшать размер шрифта выделенного текста на один пункт. Однако в отличие от GrowFont и ShrinkFont они делают это независимо от того, поддерживается ли новый размер шрифта выбранным устройством печати или нет.
 

Операторы для работы со списками


 
DemoteList
FormatBullet
FormatBulletDefault, FormatBulletDefault()
FormatBulletsAndNumbering
FormatDefineStyleNumbers
FormatMultilevel
FormatNumber
FormatNumberDefault, FormatNumberDefault()
PromoteList
RemoveBulletsNumbers
SkipNumbering, SkipNumbering()
ToolsBulletListDefault
ToolsBulletsNumbers
ToolsNumberListDefault
 



Операторы FileClose



Оператор FileClose [Save] закрывает активный документ и связанное с ним окно.
 
Синтаксис
 
FileClose [Save]
 
Пример.
 
Откроем новый файл, вставим в него текст и спросим пользователя, сохранить ли изменения.
 
Sub MAIN
FileNewDefault
Insert "Это тест для оператора FileClose"
FileClose 0
End Sub
 



Операторы и функции настройки



В эту группу входят операторы для работы с меню, панелями инструментов и функции, возвращающие значение настроек.
 
Оператор ListCommands
 
Эта команда, не имеющая атрибутов, создаёт новый документ и строит таблицу, в которой перечисляются все встроенные команды Word 6.0/7.0. Эта таблица будет также содержать все быстрые клавиши и назначения меню, присвоенные этим командам.
 
 
Функция CountToolbars
 
Возвращает число инструментальных панелей, перечисленных в диалоговом окне Toolbars (меню View). Обратите внимание, что не во всех обстоятельствах перечислены все инструментальные панели. Например, инструментальная панель редактирования макрокоманд появляется в диалоговом окне Toolbars только когда окно редактирования макрокоманд открыто.
 
Синтаксис:
 
CountToolbars([Контекст])
 
где аргумент Контекст задаёт, о каких инструментальных панелях идёт речь:
0 – активные панели инструментов, базирующиеся на шаблоне Normal;
1 или опущен – панели инструментов, доступные в текущий момент в зависимости от настроек (если есть) или других глобальных шаблонов.
 
Функция CountToolbarButtons
 
Синтаксис: CountToolbarButtons(Toolbar$ [,Контекст])
 
Возвращает число кнопок на указанной инструментальной панели. При этом пробелы и окна со списками считаются за кнопки.
 
Аргументы:
Имя_панели$       имя панели, в том виде как оно появляется в диалоговом окне Toolbars (меню View);
Контекст           значения, как и у функции CountToolbars.
 
Функция ToolbarName$
 
Синтаксис:
 
ToolbarName$(Toolbar [, Context])
 
Пример.
 
Получим список имён инструментальных панелей с числом кнопок на каждой из них. Так как число кнопок известно, синтаксис может быть изменён, чтобы узнать число кнопок на конкретной панели.
 
Sub MAIN
For i = 1 To CountToolbars(0)
имя$ = ToolbarName$(i)
кнопок = CountToolbarButtons(имя$)
Insert имя$ + "," + Str$(кнопок) + Chr$(13)

Next i
End Sub
 
Выполнение этой макрокоманды на моей машине дало следующий результат:
 
Standard, 29
Formatting, 22
Borders, 11
Database, 14
Drawing, 30
Forms, 11
Macro, 17
Microsoft, 8
Word for Windows 2.0, 29
Tip Wizard, 3
Translate, 9
 
Оператор MenuMode
 
Активирует линейку меню. MenuMode соответствует нажатию клавиши ALT или F10 на клавиатуре.
 
Синтаксис:
 
MenuMode
 
Пример.
 
Функция CountMenus
 
Синтаксис:
 
CountMenus(Type [, Context])
 
Аргументы:
Type – тип меню для подсчёта:
0 – меню на линейке меню, когда документ открыт;
1 – меню на линейке меню, когда нет открытых документов;
2 – краткие меню.
Context – задаёт, какие меню подсчитываются:
0 – меню, которые доступны, когда документ базируется на шаблоне Normal.dot;
1 или опущено – меню, которые доступны в текущий момент (их число зависит от установок при настройке, если они были сделаны, от активного глобального шаблона и от шаблона Normal.dot.
 
Пример:
 
Определить число меню, доступных пользователю, когда активен документ, базирующийся на шаблоне NORMAL.DOT.
 
Sub MAIN
NumMenus = CountMenus(0, 0)
MsgBox "Документ имеет " + Str$(NumMenus) + " доступных меню."
End Sub
 
Оператор OutlineShowFormat
 
Выводит на экран символы отформатированные в режиме структуры документа или, если их форматирование уже показано, скрывает их. Если активный документ не в режиме просмотра структуры или главного документа, происходит ошибка.
 

Операторы изменения уровня



OutlineMoveDown перемещает выбранные абзацы выше следующего видимого абзаца. Тело текста перемещается вместе с заголовком только если тело текста выбрано или свёрнуто.
OutlineMoveUp
OutlinePromote
OutlineShowFirstLine, OutlineShowFirstLine()
OutlineShowFormat
RemoveSubdocument
ShowAllHeadings
ShowHeadingNumber
SplitSubdocument
ViewMasterDocument, ViewMasterDocument()
ViewOutline, ViewOutline()
ViewToggleMasterDocument