На этом шаге мы рассмотрим пример программного создания панели инструментов.
Приведем пример проекта, который создает интерфейс приложения, состоящего из строки меню и одной панели инструментов. В панель инструментов входят две кнопки и раскрывающийся список. На поверхности одной из кнопок выводится рисунок, а другой — надпись (рисунок 1).
Рис.1. Пользовательский интерфейс
Каждая из кнопок связана с макросом таким образом, что их активизация приводит к выполнению соответствующего макроса. Кроме того, эти кнопки снабжены пояснительными надписями, которые отображаются в окне всплывающей подсказки. При закрытии приложения данная панель инструментов удаляется, а ее место занимают панели инструментов Стандартная (Standard) и Форматирование (Formatting).
В окне Проект - VBAProject (Project - VBAProject) (рисунок 2) выберите лист ThisWorkbook (ЭтаКнига) и наберите следующие две процедуры.
Рис.2. Задание процедур в книге
Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window) ' Процедура создания новой панели инструментов при ' открытии рабочей книги ' ' При открытии рабочей книги панели инструментов Форматирование ' и Стандартная скрываются ' With Application .CommandBars("Formatting").Visible = False .CommandBars("Standard").Visible = False End With ' Создание новой панели инструментов с именем ' МояПанельИнструментов, которая будет ' удаляться при закрытии приложения ' With Application.CommandBars.Add(Name:="МояПанельИнструментов", _ Position:=msoBarTop, MenuBar:=False, Temporary:=True) .Visible = True With .Controls ' Создание кнопки с рисунком With .Add(Type:=msoControlButton, ID:=2950) .TooltipText = "КнопкаДейства1" .OnAction = "Действо1" End With ' Создание кнопки с надписью With .Add(Type:=msoControlButton, ID:=1) .Caption = "Действо" .TooltipText = "КнопкаДейства2" .Style = msoButtonCaption .OnAction = "Действо2" End With ' Создание раскрывающегося списка With .Add(Type:=msoControlDropdown) .AddItem "Приедет", 1 .AddItem "Уедет", 2 .AddItem "Еще не решил", 3 .ListIndex = 1 End With End With End With End Sub Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window) ' Процедура, отображающая панели инструментов Форматирование ' и Стандартная при закрытии приложения With Application .CommandBars("Formatting").Visible = True .CommandBars("Standard").Visible = True End With End Sub
А на листе модуля (рисунок 3) введите следующие две процедуры, которые будут выполняться при нажатии на соответствующие кнопки.
Рис.3. Задание процедур в модуле
Sub Действо1() MsgBox "Результат действа 1" End Sub Sub Действо2() MsgBox " Результат действа 2" End Sub
Результат работы изображен на рисунке 1.
На следующем шаге мы рассмотрим еще один пример.