VBA. Лабораторна робота 4
CommandBars
Свойства и методы коллекции CommandBars
Property ActionControl As CommandBarControl вызывается обычно в OnAction процедуре и возвращает объект CommandBarControl, чье свойство OnAction связано с этой выполняемой процедурой. Если же такого объекта нет, то возвращается значение Nothing, что бывает при вызове этого свойства из обычной процедуры. Позволяет отключить доступ к объекту на время выполнения процедуры.
Property ActiveMenuBar As CommandBar возвращает объект CommandBar, представляющий активную панель меню.
Property DisplayKeysInTooltips As Boolean, DisplayTooltips As Boolean - если свойства имеют значения True, то на панели отображаются назначения "горячих" клавиш.
Property LargeButtons As Boolean- значение True позволяет включить клавиши "большого" размера.
Function Add([Name], [Position], [MenuBar], [Temporary]) As CommandBar. Метод Add - основной метод коллекции позволяет программным путем добавить в коллекцию новую собственную панель, дав ей имя Name. Параметр Position указывает расположение панели на экране. Его возможные значения: msoBarLeft, msoBarTop, msoBarRight, msoBarBottom указывают, куда стыковочная панель будет причалена - справа, слева, вверху или снизу экрана. Значение msoBarFloating этого параметра указывает, что панель появится в плавающем состоянии. Значение msoBarPopup указывает, что новая панель создается для контекстного меню. Булев параметр MenuBar имеет значение True, когда новая панель заменяет главную панель меню. Булев параметр Temporary позволяет сделать добавление панели временным (на момент сеанса) или постоянным.
Function FindControl([Type], [Id], [Tag], [Visible], [Recursive]) As CommandBarControl Позволяет найти на панелях, входящих в коллекцию, элемент, удовлетворяющий критериям поиска. Параметры, являющиеся ключами поиска, могут быть опущены, достаточно задания одного из них. Булев параметр Recursive указывает, нужно ли вести поиск на всю глубину, включая все подменю. Если критериям поиска удовлетворяет несколько элементов, то в качестве результата возвращается первый из них. Возвращается значение Nothing, если поиск был безуспешным.
Sub ReleaseFocus() Все панели теряют фокус.
В Office 2000 у этой коллекции появились новый метод, новое свойство и новое событие:
Function FindControls([Type], [Id], [Tag], [Visible]) As CommandBarControls. Является обобщением метода FindControl, возвращая в случае успеха коллекцию CommandBarControls, содержащую все элементы, удовлетворяющие критериям поиска.
Property AdaptiveMenus As Boolean. Позволяет включить или выключить свойство адаптивности встроенных меню, автоматически настраивающее их видимый состав в зависимости от частоты использования той или иной команды меню.
Event OnUpdate(). Событие возникает при любых изменениях командной панели объекта CommandBar.
Свойства и методы объекта CommandBar
Property BuiltIn As Boolean Это булево свойство определено как для панели, так и для ее элементов, значение True указывает, что панель или элемент являются встроенными, False - определены пользователем.
Property Context As String - позволяет установить или проверить контекст, определяющий местоположение хранения панели, то ли непосредственно с самим документом, то ли в другом возможном месте, зависящем от приложения.
Property Controls As CommandBarControls - можно сказать центральное свойство, возвращающее коллекцию элементов, располагаемых на панели.
Property Enabled As Boolean, Visible As Boolean - тоже два центральных и широко используемых свойства. Первое позволяет выключить доступ к панели, обычно временно, второе делает панель вообще невидимой и тем более недоступной.
Property Height As Long, Left As Long, Top As Long, Width As Long - типичные свойства графических элементов, в том числе для панели и ее элементов. Задают размеры элемента.
Property Index As Long - возвращает порядковый номер элемента в коллекции.
Property Name As String, NameLocal As String - имя панели или ее элемента, для встроенных панелей (элементов) имеют смысл два имени "родное" английское имя и локализованное.
Property Position As MsoBarPosition- такое же свойство, как у коллекции панелей, но применяемое к отдельно взятой панели.
Property Protection As MsoBarProtection - защищает панель от тех или иных действий пользователя. Значением свойства являются константы, определяющие, что конкретно нельзя делать с панелью, например, менять ее размеры или передвигать.
Property Type As MsoBarType- возвращает тип панели.
Sub Delete() - удаляет панель
Function FindControl([Type], [Id], [Tag], [Visible], [Recursive]) As CommandBarControl - такой же метод поиска элемента, как и описанный выше для коллекции, но поиск ограничен пределами одной панели.
Sub Reset() - Восстанавливает установки, принятые по умолчанию, в частности конфигурацию встроенных панелей.
Sub ShowPopup([x], [y]) - отображает контекстную панель в позиции, заданной курсором или параметрами X и Y, если они указаны.
Function Add([Type], [Id], [Parameter], [Before], [Temporary]) As CommandBarControl
Метод позволяет добавлять новые элементы в коллекцию. Его параметры:
Type устанавливает тип элемента и класс этого элемента, возвращаемый функцией Add. Если значением Type является константа msoControlButton, то возвращается объект класса CommandBarButton, для значений: msoControlEdit, msoControlDropdown, msoControlComboBox - возвращается объект класса CommandBarComboBox и, наконец, если тип имеет значение msoControlPopup, то возвращаемый класс объекта - CommandBarPopup
Id задает идентификатор встроенного элемента, добавляемого в коллекцию. Если он опущен, то на панели появится пользовательский, пустой элемент, свойства которого позднее следует определить.
Parameter для встроенных элементов используется приложением при запуске команды, для пользовательских элементов может хранить некоторую информацию об элементе.
Before задает местоположение элемента на панели, если он опущен, элемент добавляется в конец панели.
Temporary является булевым параметром. Его значение True говорит о том, что элемент является временным и будет удален с панели при закрытии приложения. По умолчанию элементы являются постоянными.
Об’єкти типу CommandBar
В объектной модели Office все панели инструментов и меню представлены объектами типа
CommandBar. Каждая панель инструментов, строка меню, каждое меню в строке меню, и даже
подменю, заключающееся в пункте меню — это объект типа CommandBar. Все объекты
CommandBar приложения (не имеет значения, о каком приложении идет речь — макрос VBA мо-
жет даже “не знать”, в какой именно среде он работает) объединены в семейство CommandBars
данного приложения.
Об’єкти типу CommandBarControl
Находящиеся на панели инструментов элементы управления представлены объектами типа
CommandBarControl, которые объединены в семейство CommandBarControls. Все инст-
рументальные панели, доступные в меню Вид | Панелі інструментів. Кнопки и прочие элемен-
ты управления можно убрать с панели или поместить на любую панель. То же самое касается и
меню. Набор меню и команд каждый пользователь настраивает произвольным образом при помо-
щи диалогового окна Сервіс | Налаштування.
Метод FindControl: пошук елемента управління
Чтобы обратиться к конкретному элементу управления, используют метод FindControl семейства CommandBars. Этот метод способен найти элемент управления по его “личному номеру” — коду-идентификатору.
Властивість FaceId: зміна значка на елементі управління
Dim MyCon As CommandBarControl
Set MyCon = CommandBars.FindControl(ID:=23)
MyCon.FaceId = 21
Створення користувацької панелі інструментів
Dim MyCBar As CommandBar
Dim MyCon As CommandBarControl
Set MyCBar = CommandBars.Add(Name:="Моя панель инструментов", Position:=msoBarTop, _
Temporary:=True)
MyCBar.Visible = True
Set MyCon = MyCBar.Controls.Add(Type:=msoControlButton, ID:=23)
MyCon.FaceId = 23
Створення нової кнопки
Sub MySub()
MsgBox "Run and Work (: "
End Sub
Sub AddCommandBarButton
Dim MyCBut As CommandBarButton
Set MyCBut = CommandBars("Standard").Controls.Add(Type:=msoControlButton)
With MyCBut
.Style = msoButtonCaption
.OnAction = "MySub"
.Caption = "Мy macros "
End With

MyCBut.Visible = True
End Sub
Створення користувацького меню
Sub MyCommand1()
MsgBox "Run command 1"
End Sub
Sub MyCommand2()
MsgBox "Run command 2"
End Sub
Sub AddCustomMenu
Dim MyCBar As CommandBar
Dim MyCon As CommandBarControl
Dim MyMenu As CommandBarControl
Set MyCBar = CommandBars.ActiveMenuBar
Set MyMenu = MyCBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
MyMenu.Caption = "Мое меню"
Set MyCon = MyMenu.CommandBar.Controls.Add(Type:=msoControlButton, ID:=1)
With MyCon
.Caption = "My menu 1"
.TooltipText = "My menu 1"
.Style = msoButtonCaption
.OnAction = "MyCommand1"
End With

Set MyCon = MyMenu.CommandBar.Controls.Add(Type:=msoControlButton, ID:=2)
With MyCon
.Caption = "My menu 2"
.TooltipText = "My menu 2"
.Style = msoButtonCaption
.OnAction = "MyCommand2"
End With
End Sub
Додавання користувацької команди