Шаг 87.
VBA в MSExcel. Программирование панели инструментов. Пример создания панели инструментов пользователя

    На этом шаге мы рассмотрим пример программного создания панели инструментов.

    Приведем пример проекта, который создает интерфейс приложения, состоящего из строки меню и одной панели инструментов. В панель инструментов входят две кнопки и раскрывающийся список. На поверхности одной из кнопок выводится рисунок, а другой — надпись (рисунок 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.

    На следующем шаге мы рассмотрим еще один пример.




Предыдущий шаг Содержание Следующий шаг