Главная страница Visual 2000 · Общий список статей

Как повысить комфорт вашего "офиса"
От настройки офисных программ к созданию сложных программных комплексов

Андрей Колесов

© 2000, Андрей Колесов
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "Наука и жизнь" N 10/2000, с. 14-18.

См. также опубликованные там же статьи:

"Хорошего работника узнают по инструменту."
Пословица

"Разумно взять инструмент и испытать его. При неудаче честно признайтесь в этом и попробуйте другой инструмент. Но главное — делайте что-нибудь."
Франклин Д. Рузвельт


В статье "Microsoft Office — пакет программ для офиса и дома"

В статье "Microsoft Office — пакет программ для офиса и дома" кратно рассказывалось о составе и функциональных возможностях прикладных программ, входящих в состав семейства Microsoft Office 2000. Казалось бы, там есть все, что нужно для самого взыскательного пользователя — выбирай нужный пакет и работай. Однако на самом деле это не совсем так.

Действительно, число офисных программ растет (пять лет назад в составе MS Office было четыре приложения, сегодня — девять), от версии к версии расширяется функциональность каждой из них. А конкретному пользователю все-таки постоянно чего-то не хватает. И такая ситуация является вполне естественной и легко объяснимой.

Во-первых, тут работает классический статистический закон 20/80 (одна из его прикладных формулировок: "20 процентов населения выпивает 80 процентов пива"). Каждый конкретный пользователь использует не более 10-20% имеющихся в программе функций. И это не означает, что приложение обладает избыточностью, включает что-то явно лишнее. Просто каждому пользователю нужно иметь свой индивидуальный набор этих "двадцати процентов". И для эффективной работы желательно, чтобы именно данный конкретный набор функций был "под рукой". (Так же, как часто применяемые справочники должны лежать на рабочем столе, редко используемые — в книжном шкафу или даже в дальней кладовке.)

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

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

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

Достигается, это тремя основными способами (мы их рассмотрим далее):

  1. Настройка интерфейса программы и создание простейших макрокоманд.
  2. Подключение к приложению готовых "расширений", разработанных кем-то другим.
  3. Создание собственных расширений, начиная от макрокоманд и заканчивая сколь угодно сложными приложениями.

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

В начало статьи

Настройка интерфейса Word

Для работы с документом можно использовать свыше тысячи (!) различных встроенных операций Word. Обращение к ним выполняется с помощью команд меню или кнопок на панелях инструментов, расположенных обычно в верхней части экрана. Линейка меню включает только самые необходимые и часто используемые команды. Остальные команды разбросаны по 23-м встроенным панелям инструментов программы (в 1994 году Word 6.0 включал всего 8 панелей).

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

Линейка меню, которая находится в верхней части окна среды Word, представляет собою особую панель — ее нельзя удались с экрана. Все остальные панели инструментов можно добавлять или убирать с экрана и помещать в любую его часть. Конечно, можно вывести на экран все панели инструментов, но тогда не останется места для самого документа (рис. 1). Вывод на экран нужного набора панелей проще всего выполняется с помощью команды Вид|Панели Инструментов (рис. 2). Кроме того, для каждой панели можно указать набор кнопок, которые должны быть представлены в данный момент (рис. 3).

Более широкие возможности настройки реализуются с помощью диалогового окна Настройка, которое вызывается командой Сервис|Настройка (рис. 4). В этом режиме пользователь может размещать на панелях инструментов любые команды (не только встроенные в панель изначально) и в любом месте, а также создавать собственные "пользовательские" панели, разместив на них произвольный набор кнопок. Все эти операции выполняются простым перетаскиванием мышью изображений кнопок. Таким образом, можно формировать собственный индивидуальный набор панелей инструментов, рассортировав на нем команды в нужном конкретному пользователю виде.

В начало статьи

Создание собственных макрокоманд методом записи

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

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

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

  1. Открыть файл с документом, например, SomeFile.DOC.
  2. Выделить весь текст (команда Правка|Выделить все).
  3. Установить тип и размер шрифта (команда Формат|Шрифт, далее установка в диалоговом окне нужных параметров).
  4. Установить параметры форматирования абзаца (команда Формат|Абзац, далее установка в диалоговом окне нужных параметров).
  5. Сбросить выделение текста (например, нажать клавишу Home для установки курсора в начало текста).
  6. Сохранить документ с тем же именем (команда Файл|Сохранить)
  7. Распечатать документ (команда Файл|Печать, далее нажать OK).
  8. Закрыть документ (команда Файл|Закрыть).

Так вот - можно сделать так, что вся эта последовательность операций будет осуществляться нажатием одной кнопки на панели инструментов. Делается это с помощью установки режима "Запись макрокоманды". Для этого выполните следующие операции.

Все, теперь к тысяче встроенных команд Word прибавилась еще одна, которая выполняет специфическую, но очень полезную для вас операцию. Обработка всех других аналогичных файлов будет выполняться нажатием одной кнопки на панели инструментов (разумеется, команду можно разместить и в меню). То, что раньше требовало 20-30 секунд (и внимания человека!), теперь занимает не более 2-3 секунд.

ПРИМЕЧАНИЕ. Термин "макрокоманда" используется, чтобы подчеркнуть, что "макрокоманда" состоит из последовательности некоторый "простых" команд. В то же время часто подразумевается, что "команда" — это некоторая встроенная функция приложения, а "макрокоманда" — созданная пользователем.

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

В начало статьи

Как устроена макрокоманда

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

Чтобы понять подход к решению такой задачи, давайте посмотрим, как же реализована созданная выше макрокоманда НашеФорматированиеДокумента. Для этого выберите команду Сервис|Макрос|Макросы, в появившемся диалоговом окне выделите имя макрокоманду и нажмите кнопку Отладка. Через пару секунд вам откроется новое окно со средой программирования, которая VBA — Visual Basic for Applications (Visual Basic для приложений). Это и есть та самая огромная подводная часть айсберга MS Office, о которой мы упоминали в начале статьи (рис. 6).

Обратите внимание, что среда VBA представлена в англоязычном варианте — ее создатель, корпорация Microsoft считает нецелесообразным локализацию для национальных языков средств программирования (с таким подходом можно вполне согласится).

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

В одном из окон среды VBA вы увидите программный код, который, как можно легко догадаться, выполняет созданную нами макрокоманду:


Sub НашеФорматированиеДокумента()
'
' НашеФорматированиеДокумента Macro
' Macro recorded 17.08.00 by Kolesov Andrei
'
    Selection.WholeStory           '2. выделить весь текст
    Selection.Font.Name = "Arial"  '3.тип шрифта 
    Selection.Font.Size = 12       '3. размер шрифта 
    With Selection.ParagraphFormat '4.установить параметры форматирования
        ....                       ' абзаца   
        .OutlineLevel = wdOutlineLevelBodyText
    End With
    Selection.HomeKey Unit:=wdStory  ' 5. сбросить выделение, 
                                     '    курсор в начало
    ActiveDocument.Save              ' 6. сохранить документ
     ' 7. распечатать документ (тут задается много параметров 
     ' диалогового окна Печать
    Application.PrintOut FileName:="", Range:=wdPrintAllDocument, _
        Item:= wdPrintDocumentContent, Copies:=1, Pages:="", _
        PageType:=wdPrintAllPages, Collate:=True, Background:=True, _
        PrintToFile:=False, PrintZoomColumn:=0, _
        PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
    ActiveDocument.Close ' 8. Закрыть документ
End Sub

В приведенном здесь коде мы не показали около полутора десятков строк внутри конструкции With... End With — там производится тривиальная установка параметров диалогового окна ФорматированиеАбзаца. Даже не имея ранее дел с программированием, можно легко догадаться, что каждая строка этой небольшой программы соответствует одной операции, выполненной при записи макрокоманды. Минимальное знание английского языка позволит понять смысл команд, но мы на всякий случай написали русские комментарии. Если вы захотите подробнее узнать на назначении каждой команды и различных вариантах ее применения, то установите курсор на нужно слове и нажмите F1 (но вся справка Office/VBA 2000 реализована на английском языке).

В начало статьи

Пишем макрокоманду "руками" — начинаем программировать

Теперь давайте попробуем написать необходимую нам макрокоманду удаления ненужного документа. Для этого вернемся в среду Word (переход из среды Word в VBA и наоборот выполняется нажатием комбинации клавиш Ctrl+F11). Далее откроем какой-нибудь документ и с помощью метода записи создадим макрокоманду ЗакрытьУдалить, которая пока будет состоять только из одной операции — закрыть файл (команда меню Файл|Закрыть). Теперь перейдем в среду VBA и посмотрим код, сформированной нами макрокоманды. Если вы внимательно изучили содержимое предыдущей макрокоманды, то для вас не будет открытием то, что код новой будет выглядеть следующим образом:


Sub ЗакрытьУдалить()
  ActiveDocument.Close
End Sub

Пока эта макрокоманда умеет только закрывать файл. Чтобы выполнить удаление файла нужно выполниться следующие операции:

Чтобы реализовать это, нужно сформировать такой программный код:


Sub ЗакрытьУдалить()

  FileName$ = ActiveDocument.FullName  ' полное имя файла 
                                       'активного документа
  ' запрос на подтверждение удаления
  Result = MsgBox("Удалить файл " & FileName$ & " ?", vbYesNo, _
           "Закрыть и удалить")
  If Result = vbYes Then ' получен ответ "Да"
    ActiveDocument.Close  ' закрыть документ
    Kill FileName$        ' удалить файл
  End If
End Sub

Возможно, я сильно заблуждаюсь, но мне кажется, что приведенный здесь код не требует особых пояснений. Очевидно, что мы могли бы легко обойтись и без начальной записи макрокоманды, чтобы сформировать одну строчку кода. (Автономное создание новой макрокоманды выполняется такой последовательностью команд — Сервис|Макрос|Макросы|Создать.) Приведу пример кода еще одной полезной макрокоманды, смысл которой отражен непосредственно в ее названии:


Sub ЗакрытьВсеОткрытыеДокументыЗаИсключениемАктивного()
  Dim МойДокумент As Document
  For Each МойДокумент In Documents  ' перебираем все документы
    If МойДокумент.Name <> ActiveDocument.Name Then 'имя совпало?
       Documents(МойДокумент).Close 'Нет, закрыть документ
    End If
  Next
End Sub

Здесь хотелось бы обратить внимание читателей на особенность современных средств программирования — реализацию возможности их интуитивного понимания (об этом см. врезку "Изучать программирование — полезно для работы"). Действительно, текст программы очень похож на обычные разговорные логические обороты (только на английском языке). При этом смысл процедур и переменных можно отражать непосредственно в их именах. (Много лет назад были ограничения длины имен в 3 или 6 символов, поэтому приходилось иметь дело с терминами, которые с трудом поддавались простой интерпретации. Догадайтесь, что скрывается за именами тип, M10 или CVX). Для имен можно использовать русские символы, но ключевые слова языка в данном случае обозначаются только английским алфавитом.

ПРИМЕЧАНИЕ. Подобные механизмы внутреннего программирования приложений широко используют и российские разработчики приложений. Самый наглядный пример — технологическая платформа для решения разнообразных учетно-экономических задач "1С:Предприятие". В этой системе можно использовать в качестве синтаксиса языка программирования, как русский, так и английский язык.

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

В начало статьи

Подключение готовых расширений

Однако прежде чем писать свои макрокоманды, полезно уточнить — а нет ли уже готовых расширений, которые смогут решить ваши проблемы? Действительно, выше мы создали три макрокоманды, которые сохранились в глобальном шаблоне Normal.dot. Любой другой пользователь может переписать этот файл и применить наши разработки. Не говоря уже о том, что есть и другие, более удобные способы передачи расширений от одного приложения к другому.

На самом деле имеется огромное число таких программных дополнений для офисных приложений, некоторые из них распространяются на коммерческой основе, но огромное число — бесплатно. Нужно только знать, где их искать и как подключать. В качестве наиболее полного и самого известного русскоязычного Web-ресурса с такими программами можно уверенно посоветовать сервер — www.microsoft.ru/offext/.

В течение последних трех лет российское отделение Microsoft проводит конкурс Office Extensions (офисные расширения) на лучшие разработки разнообразных дополнений для приложений MS Office. За эти годы лауреатами конкурса, получавшими ценные призы, стали несколько десятков человек, не только из России, но также — из стран ближнего и дальнего зарубежья. Библиотека общедоступных программ в настоящее время насчитывает около 300 самых разнообразных разработок, ежедневно услугами этой библиотеки пользуется несколько сот человек.

Мой совет: загляните на сервер Microsoft Office Extensions и вы наверняка найдете там что-то интересное и полезное для себя — программные расширения, которые сделают вашу работу с офисными приложениями еще эффективнее.

А в прошлом году на сервере появился еще один раздел, предназначенный для поддержки VBA- программистов. Поэтому, если вы хотите не только пользоваться чужими разработками, но и создавать свои собственные, то обязательно внимательно познакомьтесь с материалами, которые находятся по адресу www.microsoft.ru/offext/developers/ Там находятся информационные ресурсы, которые пригодятся, как начинающим программистам, так и опытным разработчикам.

В начало статьи