Если вам предложат создать посредством VBA панель инструментов, то, скорее всего, вы попробуете применить метод Add (Добавить) для создания нового элемента коллекции Toolbars (Панели инструментов). Вы правы в своей догадке о применении метода Add, но коллекции Toolbars в VBA нет. В VBA панели инструментов группируются совместно со строкой меню и контекстными меню и образуют коллекцию CommandBars (Командные панели). Таким образом, создание новой панели инструментов равносильно созданию нового элемента коллекции CommandBars с помощью метода Add.
После создания панели инструментов следующий шаг очевиден - вставка в нее кнопок инструментов. Для этого также используется метод Add, но уже применительно к коллекции Controls (Элементы управления). Распишем пошагово процесс создания панели инструментов.
Откройте рабочую книгу Гость.
Нажмите комбинацию клавиш <Alt+F11> для открытия редактора Visual Basic.
Создайте новую процедуру с именем МояПанель.
Введите код этой процедуры.
Dim ctlGEButton As Object
ThisWorkbook.Activate
Application.CommandBars.Add Nаmе:="Моя панель"
CommandBars("Моя панель").Visible = True
Set ctlGEButton = Application.CommandBars("Моя панель"). _
Щелкните на кнопке новой панели - отобразится форма Гостевые расходы.
Щелкните на кнопке Отмена для закрытия формы.
Чтобы повторить выполнение процедуры, необходимо удалить созданную панель инструментов. Для этого щелкните на ней правой кнопкой мыши, выберите команду Настройка и в диалоговом окне Настройка на вкладке Панели инструментов выделите панель Моя панель, затем щелкните на кнопке Удалить.
Проанализируем код процедуры МояПанель. Сначала в этой процедуре была объявлена переменная-объект 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-м часе.