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

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

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


Рис.1. Интерфейс с пользовательской строкой меню

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

    В окне Проект — VBA Project (Project - VBAProject) выберите лист ThisWorkbook (ЭтаКнига) и введите на нем следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
' Процедура создания новой строки меню при
' открытии рабочей книги. При закрытии приложения
' созданная строка удаляется
  With Application.CommandBars.Add(Name:="МоеМеню", _
    MenuBar:=True, Temporary:=True)
    .Visible = True

    With .Controls
    ' Создание меню Меню1

      With .Add(Type:=msoControlPopup)
        .Caption = "&Меню1"
        With .Controls

          With .Add(Type:=msoControlButton)
            .Caption = "Пункт&1"
            .OnAction = "АтьДва1"
          End With

        ' Создание подменю Меню1
        With .Add(Type:=msoControlPopup)
          .Caption = "&ПодМеню1"
          With .Controls
            With .Add(Type:=msoControlButton)
              .Caption = "Пункт&2"
              .OnAction = "АтьДва2"
            End With
            With .Add(Type:=msoControlButton)
              .Caption = "Пункт&3"
              .OnAction = "АтьДва3"
            End With
          End With
        End With
      End With
    End With

    ' Создание меню Меню2
    With .Add(Type:=msoControlPopup)
      .Caption = "&Меню2"
      With .Controls
        With .Add(Type:=msoControlButton)
          .Caption = "Пункт&4"
          .OnAction = "АтьДва4"
        End With
      End With
    End With
  End With
End With
End Sub

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

Sub АтьДва1()
  MsgBox "Стой! Стоять! Буду стрелять!"
End Sub
Sub АтьДва2()
  MsgBox "Стой! Стоять! Стреляю в воздух!"
End Sub
Sub АтьДва3()
  MsgBox "Стой! Стоять! Последний раз стреляю в воздух!"
End Sub
Sub АтьДва4()
  MsgBox "Стой! Стоять! Стреляю!"
End Sub
Текст этого примера можно взять здесь.

    Результат работы изображен на рисунке 1.

    На следующем шаге мы рассмотрим создание вручную пользовательской панели инструментов.




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