Подробнее о том, что можно сделать в VBA
Выше, в разделе Зачем мучиться с VBA?, я уже упоминал о том, как с помощью VBA можно усовершенствовать имеющиеся приложения. Пришло время обсудить это подробнее, чтобы вам стало ясно, наконец, что же все-таки можно получить от VBA.
Прежде чем приступить к реализации наших совместных планов грандиозных усовершенствований, замечу следующее: то, что можно получить от VBA, зависит от приложения, с которым вы работаете. Некоторые программы позволяют переопределить практически каждый элемент пользовательского интерфейса и каждую встроенную команду, предоставляя тем самым в изобилии строительный материал, из которого вы можете конструировать новые возможности, В других приложениях выбор оказывается намного скуднее.
Настройка пользовательского интерфейса
Одна из наиболее очевидных ситуаций, где стоит использовать VBA, - это изменение пользовательского интерфейса приложения, чтобы он стал привычнее и удобнее для вас.
(На всякий случай замечу, что пользовательский интерфейс означает то, как программа выглядит на экране, как в ней работают мышь, клавиатура и другие всевозможные средства, предоставленные программой вам, пользователю, для взаимодействия с программным обеспечением.) Во многих приложениях VBA позволяет изменять элементы пользовательского интерфейса так, как это удобно. С помощью всего нескольких строчек программного кода вы можете добавлять, удалять или изменять взаимное расположение кнопок на панелях инструментов, создавать новые панели инструментов, переопределять раскладку клавиатуры или модифицировать структуру меню. На рис. 1.1 показано окно Microsoft Word с любезно измененным VBA пользовательским интерфейсом.
Рис. 1.1.
Вам потребуется VBA, если вы захотите работать с документами Word на чистом экране, совершенно свободном ото всех панелей инструментов
Конечно, не стоит использовать паяльную лампу там, где и спички подойдут, - для самых простых изменений пользовательского интерфейса VBA часто оказывается слишком мощным средством. Многие из современных приложений позволяют изменять интерфейс вообще безо всякого программирования - с помощью перетаскивания элементов или диалоговых окон.
Тем не менее VBA полезен и б таких приложениях. С одной стороны, даже исключительно дружественные в этом смысле приложения могут не изменять некоторые части своего интерфейса без помощи VBA. С другой стороны, что еще важнее, VBA позволяет организовать целые группы автоматических изменений пользовательского интерфейса прямо во время работы - в зависимости от того, что вы делаете с программой в данный момент.
Предположим, вы работаете с суммами, превышающим миллион долларов, постоянно используя при этом одни и те же три панели инструментов. С помощью VBA вы можете создать программу, которая станет открывать эти панели инструментов вместе, а затем одновременно прятать их, когда в них нет необходимости.
До сих пор я говорил об изменении пользовательского интерфейса VBA приложения, но не о создании пользовательского интерфейса самой VBA программы. Хотя многие VBA-программы и представляют собой автоматы, выполняющие работу безо всякого вмешательства с вашей стороны, неизбежно наступит момент, когда вам понадобится создавать свои диалоговые и другие окна (для них в VBA используется обобщающий термин формы).
Добавление новых возможностей
VBA оказывается как раз кстати, когда необходимо расширить функциональные возможности приложения. Предположим, вы пожелали, чтобы в первый понедельник каждого месяца на всех создаваемых вами компьютерных иллюстрациях появлялись красные звездочки, а в каждый второй вторник- синие сердечки. Вправе ли вы ожидать, что разработчики графического приложения предусмотрели ваши пожелания? Используя строительные блоки, предоставленные в ваше распоряжение разработчиками данного приложения, вы создадите VBA-программы, которые приблизят вас к мечте.
В самом простом случае VBA-программа просто содержит определенную последовательность команд, выполняя одну и ту же последовательность шагов при каждом запуске. Тем не менее даже в этом случае VBA-программа экономит ваше время по сравнению с необходимостью активизировать каждую команду последовательности вручную.
Например, в Microsoft Word нет команды для сохранения выделенного блока текста в отдельном файле. Для решения этой задачи вам придется скопировать выделенный текст в буфер обмена, создать новый документ, скопировать в него содержимое буфера, сохранить и закрыть этот новый документ. С помощью VBA можно создать небольшую программу, которая выполнит все эти шаги автоматически (тем самым обеспечив пользователю Word возможность, которую большинство других текстовых процессоров имеют еще со времен СР/М, - операционной системы, использовавшейся на самых первых персональных компьютерах). VBA-код такой программы может выглядеть примерно так:
Public Sub CopyBlockToFile( )
Selection.Range.Copy ' копирует выделенное
' в буфер обмена
Documents.Add ' создает новый документ
Selection.Range.Paste ' вставляет содержимое буфера
' в новый документ Dialogs(wdDialogFileSaveAs).Show
' открыват диалоговое ACtiveDocument.Close
' окно Сохранение документа
End Sub ' закрывает новый документ
Но, поскольку VBA полноценный язык программирования, VBA-программа совсем не обязана следовать в точности одним и тем же шагам при каждом запуске. Напротив, она должна всякий раз действовать в соответствии с теми условиями, которые обнаруживает после своего запуска. Вот несколько примеров того, как это должно выглядеть.
* Во время запуска VBA-программа может отвечать на то, что делает в данный момент приложение, или на конкретные установки системы в целом. В случае упомянутого примера с Word, можно потребовать, например, чтобы программа сохраняла новый документ, если только некоторый текст уже выбран, а иначе ей предписано только чесать затылок и поглаживать животик. Подобным образом вы можете пожелать, чтобы ваша программа выполняла одни действия утром, а другие - вечером.
* VBA-программа может (в зависимости от содержимого текущего документа) выполнять определенные действия с другим документом того же или другого приложения.
* VBA-программа может отвечать на информацию, вводимую пользователем во время работы программы (рис. 1.2). С помощью VBA легко создавать диалоговые окна, предлагающие пользователю либо