[an error occurred while processing this directive]

В начало

Введение

1-й час. Знакомство с Visual Basic for Applications

2-й час. Работа с макросами

3-й час. Работа с элементами управления

4-й час. Переменные и константы

5-й час. Ввод данных

6-й час. Логика условных операторов

7-й час. Циклические вычисления

8-й час. Введение в объекты

9-й час. Основные объекты Excel

10-й час. Объект Range

11-й час. Редактор Visual Basic

12-й час. Отладка программ

13-й час. Обработка ошибок

14-й час. Экранные формы

15-й час. Автоматизация экранных форм

16-й час. Панели инструментов

17-й час. Работа с меню

18-й час. Диаграммы

19-й час. Сводные таблицы

20-й час. Получение внешних данных

21-й час. Доступ к данным с помощью ADO

22-й час. Еще об ADO

23-й час. Автоматизация

24-й час. Выполнение процедур

Приложение. Ответы

16-й час. Панели инструментов

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

В этом часе будут рассмотрены следующие вопросы.

  • Добавление кнопок на панели инструментов "вручную".
  • Создание новых панелей инструментов.
  • Работа с панелями инструментов с помощью процедур.

Настройка панелей инструментов

Меня всегда поражало, как мало пользователей Excel, которые создают собственные панели инструментов или добавляют новые кнопки на существующие панели. Вместе с тем, все пользователи в своей работе применяют инструменты, расположенные на панелях, и находят это очень удобным. С этой точки зрения, есть два известных конкурирующих способа выполнения процедур (не считая способов исполнения процедур в редакторе Visual Basic): назовем их "щелчковый" и "командный". В первом способе процедура назначается какому-либо элементу управления, а затем вызывается на исполнение щелчком на этом элементе. Во втором способе процедура выполняется из диалогового окна Макрос, которое открывается командой Сервис > Макрос > Макросы. Если вам не хочется использовать элементы управления в рабочем листе или вы устали от постоянного выполнения команды Сервис > Макрос > Макросы, то есть еще один способ выполнения процедур (из разряда "щелчковых") - надо назначить процедуру кнопке панели инструментов.

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

  1. Откройте рабочую книгу Гость.
  2. Щелкните правой кнопкой мыши на любой панели инструментов и в контекстном меню панели выберите пункт Настройка. Откроется одноименное диалоговое окно (рис. 16.1).

Рис. 16.1. Это диалоговое окно используется для настройки панелей инструментов и меню

  1. В диалоговом окне Настройка на вкладке Команды в списке Категории выберите пункт Макросы. В списке Команды вы увидите элемент Настраиваемая кнопка.
  2. Перетащите элемент Настраиваемая кнопка на одну из существующих панелей инструментов. При перемещении элемента Настраиваемая кнопка по панелям инструментов вы увидите рядом с ним черный указатель в виде буквы I. Он показывает, где будет располагаться новая кнопка, когда вы отпустите кнопку мыши.
  3. Выбрав подходящее место для новой кнопки, отпустите кнопку мыши. Новая кнопка будет вставлена на панель инструментов (рис. 16.2).
  4. Щелкните правой кнопкой мыши на новой кнопке. В контекстном меню кнопки выберите пункт Имя и введите имя кнопки Гостевые расходы. Это имя будет отображаться в качестве экранной подсказки данной кнопки.
  5. Еще раз щелкните правой кнопкой мыши на новой кнопке и в контекстном меню выберите пункт Выбрать значок для кнопки. Откроется палитра изображений-значков, которые можно поместить на кнопку (рис. 16.3). Выберите изображение по своему вкусу, и стандартное изображение на кнопке заменится на выбранное вами.

Рис. 16.2. Новая кнопка вставлена на стандартную панель инструментов

Рис. 16.3. Широкий выбор значков для новой кнопки

  1. Снова щелкните правой кнопкой мыши на новой кнопке и в открывшемся меню выберите пункт Назначить макрос. В открывшемся одноименном диалоговом окне выберите процедуру ЗагрузкаФормы.
  2. Закройте диалоговое окно Настройка.
  3. Щелкните на новой кнопке. Должна отобразиться форма Гостевые расходы.
  4. Щелкните на кнопке Отмена для закрытия формы.

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

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

  1. Щелкните правой кнопкой мыши на любой панели инструментов и в контекстном меню выберите пункт Настройка.
  2. Когда открыто диалоговое окно Настройка, можно удалить любую кнопку. Для этого просто перетащите кнопку из панели инструментов в это диалоговое окно.
  3. Закройте диалоговое окно Настройка.

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

Создание панелей инструментов

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

Для создания новой панели инструментов выполните следующие действия.

  1. Щелкните правой кнопкой мыши на какой-нибудь панели инструментов.
  2. В контекстном меню панели выберите пункт Настройка.
  3. В диалоговом окне Настройка перейдите на вкладку Панели инструментов.
  4. Щелкните на кнопке Создать. Появится диалоговое окно Создание панели инструментов.
  5. Введите имя панели, например Моя панель, и нажмите клавишу <Enter>. Появится маленькая пустая панель (рис. 16.4).
  6. Щелкните на кнопке Закрыть для закрытия диалогового окна Настройка.

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

Рис. 16.4. Панель создана, но она пустая

Процедуры, управляющие панелями инструментов

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

Создание панели инструментов

Если вам предложат создать посредством VBA панель инструментов, то, скорее всего, вы попробуете применить метод Add (Добавить) для создания нового элемента коллекции Toolbars (Панели инструментов). Вы правы в своей догадке о применении метода Add, но коллекции Toolbars в VBA нет. В VBA панели инструментов группируются совместно со строкой меню и контекстными меню и образуют коллекцию CommandBars (Командные панели). Таким образом, создание новой панели инструментов равносильно созданию нового элемента коллекции CommandBars с помощью метода Add.

После создания панели инструментов следующий шаг очевиден - вставка в нее кнопок инструментов. Для этого также используется метод Add, но уже применительно к коллекции Controls (Элементы управления). Распишем пошагово процесс создания панели инструментов.

  1. Откройте рабочую книгу Гость.
  2. Нажмите комбинацию клавиш <Alt+F11> для открытия редактора Visual Basic.
  3. Создайте новую процедуру с именем МояПанель.
  4. Введите код этой процедуры.

Dim ctlGEButton As Object

ThisWorkbook.Activate

Application.CommandBars.Add Nаmе:="Моя панель"

CommandBars("Моя панель").Visible = True

Set ctlGEButton = Application.CommandBars("Моя панель"). _

Controls.Add(Type:=msoControlButton, ID:=2950, Before:=l)

With ctlGEButton

 .FaceId = 2141

 .OnAction = "ЗагрузкаФормы"

End With

  1. Выполните процедуру. Новая панель создана.
  2. Щелкните на кнопке новой панели - отобразится форма Гостевые расходы.
  3. Щелкните на кнопке Отмена для закрытия формы.

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

Проанализируем код процедуры МояПанель. Сначала в этой процедуре была объявлена переменная-объект ctlGEButton, которая затем примет значение кнопки панели инструментов:

Dim ctlGEButton As Object

Далее была активизирована рабочая книга, так как панель создается именно для этой рабочей книги:

ThisWorkbook.Activate

Затем создается панель инструментов и устанавливается ее свойство Visible (Видимый) как True.

Application.CommandBars.Add Name:="Моя панель"

CommandBars("Моя панель").Visible = True

После этого для новой панели инструментов создается кнопка как элемент коллекции Controls.

Set ctlGEButton = Application.CommandBars("Моя панель").Controls. _

 Add(Type:=msoControlButton, ID:=2950, Before:=l)

Здесь аргумент Type определяет тип создаваемого элемента управления (в нашем случае - это кнопка, но могут быть и другие, например поля, списки, раскрывающиеся меню и т.п.). Аргумент ID задает тип кнопки, настраиваемой кнопке соответствует значение 2950 аргумента ID.

Далее устанавливаются свойства кнопки FaceId (Идентификатор внешнего вида) и OnAction (Действие).

With ctlGEButton

 .FaceId = 2141

 .OnAction = "ЗагрузкаФормы"

End With

Первое свойство задает изображение-значок, отображаемое на кнопке, а второе назначает кнопке макрос или процедуру (в данном случае процедуру ЗагрузкаФормы).

Если вы хотите, чтобы панель инструментов создавалась при открытии рабочей книги, поместите соответствующий код в процедуру Auto_Open. Подробно об этой процедуре будет рассказано в 24-м часе.

Удаление панели инструментов

Если вы не хотите, чтобы созданная панель инструментов стала частью среды Excel, ее надо удалить до или при закрытии рабочей книги. Для этого используется метод Delete (Удалить).

  1. Создайте новую процедуру и назовите ее УдалениеПанели.
  2. Введите код этой процедуры.

ThisWorkbook.Activate CommandBars("Моя панель").Delete

  1. Выполните процедуру. Панель инструментов Моя панель будет удалена.

Резюме

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

Следующий час будет посвящен другому важному элементу интерфейса Excel - системе меню. Мы изучим технику манипулирования встроенным меню Excel и создания собственного меню посредством VBA.

Вопросы и ответы

Вопрос. Почему в списке объектов VBA нет объекта Toolbar (Панель инструментов)?

Ответ. В VBA панели инструментов являются объектами CommandBar. Другие представители этого класса объектов - строки меню.

Вопрос. Почему я должен использовать в качестве значков на кнопках только то, что мне предлагает Microsoft? Можно ли создать собственное изображение для кнопки?

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

Практикум

С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.

Тесты

  1. Какой коллекции принадлежат панели инструментов как элементы?
  2. Какое свойство используется для назначения кнопке панели инструментов макроса или процедуры?
  3. Какой коллекции принадлежат кнопки панелей инструментов как элементы?
  4. Какой метод применяется для удаления панелей инструментов?
  5. Как вывести на экран панель инструментов с помощью кода VBA?
  6. Какое свойство применяется для задания значка, выводимого на кнопке?
  7. Истинно или ложно следующее утверждение: после создания панель инструментов автоматически выводится на экран?

Упражнение

Создайте процедуру с именем Панель_Час16. Эта процедура должна создать и вывести на экран панель инструментов 16-й час с тремя кнопками: Создать (ID равен 2530), Открыть (ID равен 23) и Сохранить (ID равен 3).

Создайте также процедуру ЗакройПанель, которая будет удалять панель 16-й час. Выполните и протестируйте эти процедуры.

[an error occurred while processing this directive]