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

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

10.9.1.Пример создания/удаления панели инструментов

Рассмотрим пример создания пользовательской панели инструментов Вставка знака с одной кнопкой, на которой расположен нестандартный рисунок и надпись «Плюс в кружочке» (Рис. 10‑16).

Рис. 10‑16. Панель инструментов с кнопкой Плюс в кружочке

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

1) включите макрорекордер,

2) воспользовавшись панелью инструментов Рисование, нарисуйте плюс в кружочке,

3) вырежьте его в буфер обмена,

4) остановите макрорекордер,

5) в редакторе VBA вырежьте нужный фрагмент кода и вставьте в свою программу:

Sub СозданиеПанелиИнструментов()

Dim PlusButton As CommandBarButton

Dim MyBar As CommandBar

'1. Создаем панель инструментов:

Set MyBar = Application.CommandBars.Add

With MyBar

.Visible = True'панель инструментов видна на экране

.Name = "Вставка знака" 'имя новой панели инструментов

.Position = msoBarTop 'расположена в верхнем углу

EndWith

'2. Создаем рисунок и вырезаем его в буфер обмена (этот _

фрагмент кода был предварительно записан макрорекордером):

ActiveSheet.Shapes.AddShape(msoShapeFlowchartOr, _

337.5, 77.25, 94.5, 94.5).Select

Selection.ShapeRange.Line.Weight = 6#

Selection.ShapeRange.Line.Visible = msoTrue

Selection.ShapeRange.Line.Style = msoLineSingle

Selection.Cut '- вырезаем рисунок в буфер обмена

'3. Добавляем кнопку на панель инструментов «Вставка знака»:

Set PlusButton = MyBar.Controls.Add(Type:=msoControlButton)

'На кнопке должен быть рисунок и надпись:

PlusButton.Style = msoButtonIconAndCaption

'Текст надписи:

PlusButton.Caption = "Плюс в кружочке"

'Вставляем рисунок:

PlusButton.PasteFace

'Кнопка доступна пользователю:

PlusButton.Enabled = True

'При щелчке по кнопке выполняется процедура Символ:

PlusButton.OnAction = "Символ"

End Sub

Замечание:

Если вы выполните это задание с самого начала (т.е. при включенном макрорекордере нарисуете плюс в кружочке), Ваш код будет несколько отличаться от приведенного примера, так как и размер, и месторасположения Вашего рисунка будут иными.

Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что панель инструментов Вставка знака создана.

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

Чтобы удалить панель инструментов можно воспользоваться следующим кодом:

Sub УдалениеПанелиИнструментов()

For Each Bar In Application.CommandBars

If Bar.Name = "Вставка знака" Then

Bar.Delete

Exit For

End If

Next

End Sub

Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что панель инструментов Вставка знака удалена.

10.9.2.Пример создания/удаления меню

Теперь создадим меню Вставка знака, которое расположим в самом конце строки меню рабочего листа (после меню Справка).

Рис. 10‑17. Добавление меню Вставка знака

Листинг программы:

Sub ДобавлениеМеню()

Set myMenuBar = CommandBars("Worksheet Menu bar")

'1. Добавляем вложенное меню:

Set newMenu = myMenuBar.Controls.Add(Type:=msoControlPopup, _

Temporary:=True)

'2. Задаем текст надписи:

newMenu.Caption = "Вставка знака"

'3. Во вложенное меню добавляем кнопку:

Set ctrl1 = newMenu.Controls _

.Add(Type:=msoControlButton, ID:=1)

'4. На кнопке должна быть только надпись:

ctrl1.Style = msoButtonCaption

'5. Добавляем надпись:

ctrl1.Caption = "Плюс в кружочке"

'6. Создаем всплывающую подсказку:

ctrl1.TooltipText = "Вставка специального символа"

'7. При щелчке по кнопке выполняется процедура Символ:

ctrl1.OnAction = "Символ"

End Sub

Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что меню Вставка знака создана.

Удаление меню

Для удаления меню воспользуемся следующей программой:

Sub УдалениеМеню()

Set myMenuBar = CommandBars("Worksheet Menu bar")

For Each Меню In myMenuBar.Controls

If Меню.Caption = "Вставка знака" Then

Меню.Delete

Exit For

End If

Next

End Sub

Задание: введите данный код в книгу Плюс в кружочке.xls и запустите его. Убедитесь, что меню Вставка знака удалено.