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

2. Автоматическое создание макросов

Чтобы создать свой макрос в OpenOffice.org не обязательно быть программистом. В OpenOffice.org имеется встроенная программа регистратор которая может запоминать все действия пользователя с документом и записывать их последовательно в специальный текстовый модуль называемый Макрос.

2.1. Запись макроса

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

Откройте документ, для которого нужно записать макрос.

  1. Выберите команды Сервис => Макросы => Записать макрос.

Откроется маленькое диалоговое окно Запись макроса с одной только кнопкой «Завершить запись» (Рис. 1).


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

Нажмите клавишу ESC, чтобы снять выделение объекта, поскольку в настоящее время макрорегистратор не записывает это действие, произведенное щелчком мыши.

  1. Нажмите кнопку «Завершить запись».

Откроется диалоговое окно Макрос, в котором можно сохранить и выполнить макрос (Рис.2).


Рис. 2. Диалог сохранения макроса.
  1. Если нужно прервать запись, не сохраняя макрос, нажмите кнопку Закрыть в диалоговом окне Макрос.

  2. Чтобы сохранить макрос в файле лабораторной работы, сначала в списке Сохранить макрос в выберите объект (например, Лаб.раб.7), в котором хотите сохранить макрос.

  3. Если нужно сохранить макрос в новой библиотеке или модуле, нажмите кнопку Новая библиотека или Новый модуль и введите имя библиотеки или модуля.

  4. В текстовом поле Название макроса введите имя нового макроса.

  5. Нажмите кнопку «Записать».

Ограничения макрорегистратора

Следующие действия не регистрируются:

Задание 1

  1. Активируйте лист «Макрос», а если его нет, то переименуйте «Лист 1»;

  2. Заполните таблицу как на рисунке (Рис. 3)


Рис. 3.
  1. Выполните команду Сервис => Макросы => Записать макрос;

  2. С помощью автозаполнения заполните первую колонку до 10;

  3. Нажмите кнопку «Записать»;

  4. Сохраните макрос с именем «Zadanie1» в файле лабораторной работы (Рис. 4.);


Рис.4.

Примечание: В текущей версии (2.4) русские имена макросов не допускаются.

  1. Очистите в первой колонке ячейки до исходного состояния, т.е. оставьте заполнеными только первую и вторую ячейки колонки;

  2. Установите курсор в ячейку A1 и выполните команду Сервис => Макросы => Выполнить макрос;

  3. В открывшемся окне «Выбор макроса» найдите ваш макрос и нажмите кнопку «Выполнить» (Рис. 5).

  4. Сохраните документ.


Рис. 5. Запуск макроса.

В результате у вас должны автоматически заполнится ячейки, с 3 по 10.

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

2.2. Редактирование макросов

Как мы видим, в результате выполнения упражнения 1 макрос получился очень ограниченый. Он автозаполняет только в колонке A и только до десяти, для того, чтобы сделать макрос универсальным, необходимо воспользоваться встроенным редактором разработки макросов и вручную добавить ему необходимые возможности.

В OpenOffice.org имеется возможность разрабатывать макросы на разных языках программирования, но в данной работе мы воспользуемся OpenOffice.org Basic (Бэйсик). Это связано с тем, что этот язык более похож на макроязык Microsoft Visual Basic for Application (VBA) и после его освоения вы сможете без труда разобраться с подобными задачами в Microsoft Office

Задание 2

  1. Запустите редактор макросов командой Сервис => Макросы => Управление макросами => OpenOffice.org Бэйсик;

  2. В диалоге Макрос выберите макрос «Zadanie1» и нажмите кнопку редактировать (Рис. 6);


Рис. 6
  1. В окне редактора найдите процедуру Sub Zadanie1 (Рис. 7.), именно эта процедура запускается на выполнение, когда вы запускаете макрос;


Рис. 7. Окно редактора макроса.

Отредактируйте процедуру примерно как в листинге 2.2.1(комментарии писать не обязательно)

Листинг 2.2.1.: Универсальный макрос автозаполнение.

sub Zadanie1

rem ----------------------------------------------------------------------

rem Блок объявления переменных

dim document as object 'Ссылка на обьект документ

dim dispatcher as object 'ссылка на объект сервис UNO

dim Selection As object 'Ссылка на выделенную область в документе

dim CurRowNumber as Long 'Номер строки на которой стоит курсор

dim EndRowNumber as Long 'Переменная в которую записывается введённое значение

dim StartCell As String 'Текстовая ссылка на текущую ячейку

dim EndCell As String 'Текстовая ссылка на последнюю ячейку

rem ----------------------------------------------------------------------

rem Здесь определяем переменные для доступа к документу

document = ThisComponent.CurrentController.Frame 'Текущий документ

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Selection = document.Controller.Selection 'Выделение

' Номер текущей строки (счёт с нуля)

CurRowNumber= Selection.CellAddress.Row

' Имя текущей колонки

CurColumnName= Selection.Columns.ElementNames(0)

' Методом конкатенации формируем адрес ячеек

StartCell= "$" & CurColumnName & "$" & CStr(CurRowNumber+1) 'Начальная ячейка

'Просим пользователя ввести число строк и

'прибавляем это число к номеру текущей строки

EndRowNumber= CurRowNumber+CLng(InputBox("Введите число :","Ввод количества строк (Max 65536)","10"))

'адрес последней ячейки

EndCell= "$" & CurColumnName & "$" & CStr(EndRowNumber)

rem ----------------------------------------------------------------------

dim args1(0) as new com.sun.star.beans.PropertyValue

args1(0).Name = "ToPoint"

'Закомментируем значение введённое автоматически

'и заменим нашей переменной для начальной ячейки

args1(0).Value = StartCell '"$A$1:$A$2"

'Задание стартовой позиции

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())


rem ----------------------------------------------------------------------

dim args2(0) as new com.sun.star.beans.PropertyValue

args2(0).Name = "EndCell"

'Заменяем значение на переменную конечной ячейки

args2(0).Value = EndCell '"$A$10"

'Запускаем функцию автозаполнения

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args2())


rem Закомментируем лишние инструкции ----------------------------------

'rem dim args3(0) as new com.sun.star.beans.PropertyValue

'args3(0).Name = "ToPoint"

'args3(0).Value = "$A$1:$A$10"


'dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

end sub

  1. Сохраните полученный макрос командой Файл => Сохранить, в редакторе OpenOffice Basic;

  2. Для назначения макросу комбинации клавиш выполните команду Сервис => Настройка и откройте вкладку Клавиатура;

  3. В открывшемся диалоге в поле Категория выделите модуль, в котором расположен макрос «Zadanie1», в поле Функция выделите макрос, после чего в поле Комбинация клавиш выберите свободную комбинацию и нажмите кнопку «Заменить» (Рис.8.);


Рис. 8. Назначение макросу комбинации клавиш.
  1. Нажмите кнопку ОК;

  2. Используя комбинацию клавиш назначенную на макрос заполните список дней недели и месяцев года (Рис. 9.).

  3. Сохраните документ.


Рис 9. Результат выполнения макроса.

Исследовательское задание.

Самостоятельно изучите диалог настройки (Сервис => Настройка) и назначтьте макрос «Zadanie1» на панель инструментов и создайте новое меню Макросы, в которое также назначте макрос.

Совет: Используйте справку OpenOffice.org. для выполнения заданий. (Клавиша F1, или меню Справка => Справка по OpenOffice.org )


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