Макрокоманды
  Регистрационная метка
Пишем на компьютере
Решение зачёта

Макрокоманда — это процедура

Макрокоманда — это объединение нескольких команд в одну персонифицированную команду. Соответствующая ей идентификация (имя, кнопка, клавиша или аккорд), используется для выполнения содержащейся в макрокоманде последовательности действий.

Иными словами, макрокоманда — это процедура.

Word предлагает два способа задания макрокоманды:

  • в режиме “обучения” редактора
  • в режиме программирования

Механизм обучения подробно излагается в Читальном зале.

Режим обучения

Действия пользователя между началом и концом записи макрокоманды Word протоколирует на языке Visual Basic и сохраняет в документе или шаблоне (зависит от настроек) для дальнейшего использования.

При формировании макрокоманды действия и параметры можно выбирать с помощью мыши, однако, движения мыши не протоколируются. Например, мышь нельзя использовать для выделения, копирования, вставки и перетаскивания элементов. Для записи этих действий следует пользоваться клавиатурой.

В режиме обучения можно строить только линейные процедуры (без циклов и ветвлений), в то время как главное преимущество макрокоманд проявляется в их циклическом повторении на больших информационных объемах.

Предлагается следующая методика разрешения этого противоречия. В макрокоманду оформляются действия, образующие тело будущего цикла, а сам цикл выполняется вручную, нажатием на клавишу, закрепленную за макрокомандой. При этом часть типично программистских забот возлагается на пользователя, как в процессе записи макрокоманды, так и в процессе ее выполнения.

Точка входа

Макрокоманда создается в расчёте на вполне определённое состояние редактируемой среды и положение текстового курсора. Макрокоманду должны завершать действия, восстанавливающие среду и положение курсора для правильного входа в новый оборот цикла.

Пусть, например, макрокоманда создается для редактирования строки, на первый символ которой указывает текстовый курсор.

Макрокоманду можно будет использовать в “ручном” цикле, если кроме редактирующих действий, она обеспечивает подготовку к новому обороту цикла — выполняет перемещение курсора в начало следующей строки и восстанавливает все изменённые режимы в исходное состояние (например, восстанавливает режим вставки, который в процессе выполнения действий изменился на режим замены).

Пользователь устанавливает курсор в начало первой строки редактируемой области и выполняет обороты цикла повторением нажатия клавиши (кнопки), ассоциированной с макрокомандой без дополнительных корректирующих действий.

Завершение

Так как тело цикла, заданное в макрокоманде, не содержит проверок на окончание, то обязанность завершить работу возлагается на человека.

Сначала пользователь выполняет макрокоманду в режиме быстрого автоповтора (“утопив” кнопку), затем, при приближении к границе редактируемой области, отпускает клавишу и начинает нажимать ее дискретно, контролируя завершение работы.

Алгоритмы

Разработка алгоритмов для макрокоманд началась еще в уроке 4. Явно об этом сказано в разделе “Алгоритмы редактирования и макрокоманды” для учителя. Задания по этой теме присутствовали и в следующих уроках. Особое внимание обращалось как раз на построение алгоритмов, способных работать в качестве тела цикла.

Если на предыдущих уроках школьники выполняли рекомендованные упражнения на составление алгоритмов редактирования, то сегодняшний урок не должен показаться им слишком сложным.

Для дополнительных объяснений принципов построения макрокоманды можно использовать следующую схему:

Алгоритм макрокоманды должен учитывать начальное положение курсора, содержать редактирующие действия и готовить курсор к выполнению макрокоманды над новым фрагментом текста. Макрокоманде должна быть поставлена в соответствие клавиша (или аккорд) на клавиатуре.

Редактирующие действия должны быть заданы так, чтобы они могли работать не только с первым фрагментом, на котором макрокоманда конструируется, но и со всеми остальными.

Пусть, например, в макрокоманду входит перемещение курсора на конец строки. Для первой строки, в которой записано слово “кот”, это действие можно задать тремя нажатиями на стрелку вправо, но оно не годится для второй строки, в которой записано слово “баран”. Универсальное программирование — клавиша End.

Режим программирования

Используя средства языка Visual Basic можно программировать очень сложные макрокоманды, содержащие ветвления, циклы, рекурсию.

Можно построить для Word собственный интерфейс, который будет закрывать его стандартные свойства, и решать конкретную задачу пользователя. При этом можно не только задавать редактирующие действия, но и создавать целые интерфейсные панели и окна с управляющими кнопками и полями ввода.

Более того, все стандартные команды Word существуют в виде объектов, доступ к свойствам и методам которых можно получить из своей собственной программы на Visual Basic. А значит, эти команды можно менять программным путем.

Visual Basic для редактора Word играет примерно ту же роль, что JavaScript для браузера. Зная объектную модель Word или браузера, программист может надстраивать над приложением свою собственную программную оболочку, существенно меняющую поведение и внешний вид редактора или браузера.

Однако, тема программирования на Visual Basic стоит существенно в стороне от нашего курса. Я ограничусь только одной иллюстрацией, которая прольёт свет на обсуждаемую тему, сорвав с нее покровы таинственности.

Давайте посмотрим, какую процедуру “сочинил” Word для Васиной макрокоманды, построенной в Читальном зале.

Выберем в меню Сервис последовательно иерархические пункты Макрос Макросы…. Затем в открывшемся окне нажмем кнопку Изменить:

Запись макрокоманды на языке Visual Basic предстанет перед нами во всей простоте и прозрачности:

Макровирусы

Макрокоманда — это процедура на языке программирования. Значит, Word передаёт управление кодам, входящим в её состав. В этом месте и открывается окно любителям подложить вам неприятности.

Как уже было сказано, Word имеет в своём составе множество встроенных макрокоманд. Они получают управление при открытии, сохранении, печати документов, при работе с другими пунктами меню.

Макровирус может переопределять стандартные действия редактора, закрывая их вовсе или маскируясь под них.

Макрокоманды Word хранит в файлах-шаблонах (расширение dot), а начиная с версии Word 97, и в самом документе (место хранения определяется настройками пользователя при создании макрокоманды). Следовательно, вирус, оформленный в виде макрокоманды, легко распространяется от пользователя к пользователю при обмене документами.

Широким каналом распространения вирусов является электронная почта. Особую опасность представляют почтовые клиенты, которые автоматически открывают doc-файлы, а значит, автоматически запускают макровирусы.

Как уберечься от заражения?

  • Не посылайте электронные письма в формате doc.
  • Не принимайте электронные письма в формате doc (приучите к этому своих корреспондентов).
  • Не открывайте незнакомый doc-файл без предварительной проверки его антивирусной программой.

Практикум

Файлы, необходимые для выполнения заданий практикума находятся по следующим адресам:

.\write\work\unit14\вопросы.doc
.\write\work\unit14\слова.doc
.\write\work\unit14\слова1.doc
.\write\work\unit14\список.doc
.\write\work\unit14\список1.doc
.\write\work\unit14\шифровка.doc
.\write\work\unit14\pic\1.gif
.\write\work\unit14\pic\2.gif
.\write\work\unit14\pic\3.gif
.\write\work\unit14\pic\4.gif
.\write\work\unit14\pic\5.gif
.\write\work\unit14\pic\6.gif

Перед работой их надо переместить в папку Мои документы.

Ниже приводятся решения последних 6 заданий практикума.

Алгоритм макрокоманды к заданию 3

Пункт алгоритма Пункт программы
Вставить картинку Вставка Рисунок Из файла
Вставить пробел ПРОБЕЛ
На первый символ следующего абзаца Ctrl+ВНИЗ

Алгоритм макрокоманды к заданию 4

Пункт алгоритма Пункт программы
На первый символ следующего абзаца Ctrl+ВНИЗ
Удалить символ конца абзаца BS
Вставить запятую и пробел , ПРОБЕЛ

Алгоритм макрокоманды к заданию 5

Пункт алгоритма Пункт программы
На конец слова Ctrl+ВПРАВО
Удалить запятую и пробел Del Del
Вставить символ конца абзаца Enter

Алгоритм макрокоманды к заданию 6

Пункт алгоритма Пункт программы
На следующую строку ВНИЗ
Выделить слово Shift+Ctrl+ВПРАВО
Вырезать слово в буфер обмена Ctrl+X
Удалить символ конца абзаца Del
На строку вверх ВВЕРХ
На конец текста в строке End
К следующей позиции табуляции Tab
Копировать слово из буфера обмена Ctrl+V
В начало следующей строки Home ВНИЗ

Алгоритм макрокоманды к заданию 7

Пункт алгоритма Пункт программы
Выделить слово Shift+Ctrl+ВПРАВО
Вырезать слово в буфер обмена Ctrl+X
Удалить символ конца абзаца Del
Найти специальное слово Ctrl+F <найти далее> <отмена>
Снять выделение ВПРАВО
Вставить новый абзац Enter
Копировать из буфера обмена Ctrl+V
В начало документа Ctrl+Home

Алгоритм макрокоманды к заданию 8

Пункт алгоритма Пункт программы
Выделить два символа Shift+ВПРАВО Shift+ВПРАВО
Вырезать в буфер обмена Ctrl+X
На конец слова Ctrl+ВПРАВО ВЛЕВО
Копировать из буфера обмена Ctrl+V
На следующее слово Ctrl+ВПРАВО

Вопросы

Ответы на вопросы

  1. Что такое макрокоманда?

    Ответ. Макрокоманда — это объединение нескольких команд в одну команду.

  2. Почему команду “Ко мне!” для Фроси можно назвать макрокомандой?

    Ответ. Потому что на самом деле Фрося выполняет три более простых команды:

    1. Подбежать ко мне.
    2. Обойти меня справа.
    3. Сесть у левой ноги.

  3. В чём заключается преимущество использования макрокоманд?

    Ответ. Макрокоманда повышает производительность труда: вместо нескольких операций пользователь выполняет одну. Макрокоманда особенно эффективна при однотипной обработке больших документов, когда её можно повторять в цикле.

  4. Расскажите алгоритм создания макрокоманды для редактора Word.

    Ответ.

    1. Установить курсор в начальное положение.
    2. Установить для макрокоманды клавишу и включить запись (Сервис Макрос Начать запись).
    3. Выполнить редактирующие действия над элементом.
    4. Выполнить подготовку к работе со следующим элементом.
    5. Выключить запись (кнопка в окне записи).

  5. Какие действия должны завершать макрокоманду, чтобы её можно было повторять многократно, работая со строками? Со словами абзаца?

    Ответ. Необходимо подготовить курсор для работы со следующим элементом (установить его в начало следующей строки, следующего слова).

  6. Расскажите алгоритм использования готовой макрокоманды.

    Ответ.

    1. Установить курсор в начальное положение для первого элемента.
    2. Нажимать клавишу, закреплённую за макрокомандой, пока все элементы не будут обработаны.

  7. В конце каждого слова нужно поставить запятую:



    Гриша написал такую макрокоманду:



    Будет ли она работать?

    Ответ. Только для первых двух строк. Макрокоманда станет универсальной, если переход на конец строки задать клавишей End.

  8. Запишите алгоритм макрокоманды, которая в конце каждого слова вставляет запятую:



    Ответ.

    Предполагаем, что в начальный момент курсор расположен перед первым символом слова.

    1. На конец слова.
    2. Вставить запятую.
    3. На начало следующего слова.

  9. Запишите алгоритм макрокоманды, которая преобразует обычную запись слова в запись с разрядкой:



    Ответ.

    Предполагаем, что в начальный момент курсор расположен перед первым символом слова.

    1. К следующему символу.
    2. Вставить пробел.

  10. Решите обратную задачу: удаление из слова, записанного с разрядкой, лишних пробелов.

    Ответ.

    Предполагаем, что в начальный момент курсор расположен перед первым символом слова.

    1. К следующему символу.
    2. Удалить пробел.

Зачетный класс

Решения зачетного класса

Сброс

В заданиях зачётного класса нужно составить алгоритм и записать программу макрокоманды для решения поставленной задачи. Перед выполнением макрокоманды курсор расположен перед первым символом в первой строке.

1. В каждой строке записано число рублей (без лишних пробелов). Преобразовать числа в копейки.



  шаг алгоритма шаг программы
1.
2.
3.
4.
5.


2. В каждой строке записано одно слово (без лишних пробелов). Нужно переместить первую букву в конец слова для каждой строки.



  шаг алгоритма шаг программы
1.
2.
3.
4.
5.
6.


3. В каждой строке записано одно слово (без лишних пробелов). Нужно обменять местами первую и последнюю букву в каждом слове.



  шаг алгоритма шаг программы
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.


Азы информатики RU 2000/2002 © А.А.Дуванов
Вверх Оглавление книги Урок 14. Макрокоманды Письмо автору Об авторах