Изменение
меню и панелей инструментов с помощью VBA
Изложение
возможностей создания и настройки меню и панелей инструментов было бы не полным,
если бы мы ничего не сказали о возможностях программного управления этими объектами.
Такие возможности понадобятся вам, если нужно, например:
-
сделать недоступным
меню, команду меню или кнопку на панели инструментов;
-
скрыть или показать
меню, команду меню или кнопку панели инструментов;
-
скрыть или показать
строку меню или панель инструментов.
Чаще всего
приходится изменять панели команд, разрешая или запрещая доступ к отдельным
их элементам — командам меню или кнопкам. Это может быть связано либо с разграничениями
прав доступа, либо с невозможностью в текущей ситуации выполнить определенную
команду. Для доступа к панелям команд и их элементам используется семейство
CommandBars объектной модели Microsoft Office. Ссылка на конкретную строку меню
или панель инструментов создается стандартным способом: с помощью оператора
set. Ниже приведен пример функции, которая позволяет изменить значение свойства
Доступ
(Enabled) элемента панели команд.
Function
SetEnabled (barName As String, index As Integer, state As Boolean) Dim cbar
As Object
Set
cbar = CornmandBars (barName)
cbar.Controls
(index) .Enabled = state
SetEnabled
= True
End
Function
В качестве
параметров в функцию передаются имя панели команд barName, индекс элемента панели
index и значение свойства state.
Переменная
cbar будет содержать ссылку на нужную панель (обращение к объекту семейства
CommandBars в данном случае выполняется по имени объекта).
Семейство
Controls содержит все элементы панели. Для доступа к конкретному элементу используется
индекс, соответствующий номеру элемента в семействе. В отличие от других семейств
объектной модели VBA в семействе Controls элементы нумеруются не с нуля, а с
единицы. Это означает, что для ссылки на первый элемент семейства необходимо
использовать выражение CommandBar .Controls (1) вместо ожидаемого CommandBar.
Controls (0).
Аналогичная
функция может быть использована для того, чтобы скрыть или показать отдельные
меню или кнопки на панели команд, только изменяться должно свойство Visible
того же самого семейства Controls:
Function
SetEnabled (barName As String, index As Integer, state As Boolean)
Dim
cbar As Object
Set
cbar = CommandBars(barName)
cbar.Controls(index).Visible
= state
SetEnabled
= True
End
Function
Созданные
вами меню и панели инструментов должны в нужное время появляться на экране.
В большинстве случаев это обеспечивается тем, что создается одна общая строка
меню и одна общая панель инструментов, которые выводятся на экран при запуске
приложения и заменяются в нужное время меню и панелями инструментов, связанными
с формами и отчетами (если, конечно, вы отключили встроенные меню и панели инструментов
Access, задав соответствующие параметры запуска).
Тем не менее,
существует возможность программно управлять выводом на экран строк меню и панелей
инструментов.
Чтобы задать
свою собственную строку меню в качестве главной строки меню в приложении, можно
либо изменить параметр
Строка меню
(Menu Bar) в окне
Параметры запуска
(Startup), либо установить свойство MenuBar объекта Application
(см.
разд. "Объектная модель Microsoft Access" гл. 13):
Application.MenuBar
= "Главное меню"
Для того чтобы
показывать или прятать панели инструментов в процессе работы программы, можно
использовать макрокоманду ПанельИнструментов (ShowToolbar). Эта макрокоманда
имеет два аргумента: имя панели инструментов и значение
Показать
(Show)
(рис. 14.34).
![](33.gif)
Рис. 14.34.
Макрокоманда ПанельИнструментов
Поле
Показать
(Show) на панели аргументов макроса позволяет определить три значения:
-
Да (Yes) — панель инструментов
будет всегда отображаться на экране;
-
В обычном режиме (Where
Appropriate) — панель инструментов будет отображаться только при необходимости,
данный режим используется для встроенных панелей инструментов;
-
Нет (No) — панель инструментов
будет скрыта.
Вместо макроса
можно использовать метод showToolbar объекта DoCmd. Пример, приведенный на рис.
14.34, может быть выражен в коде VBA следующим образом:
DoCmd
ShowToolbar "Главное меню", acToolbarYes,
где AcToolbarYes
— встроенная константа.
Содержание раздела