Изменение меню и панелей инструментов с помощью 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).

Макрокоманда ПанельИнструментов

Рис. 14.34. Макрокоманда ПанельИнструментов

Поле Показать (Show) на панели аргументов макроса позволяет определить три значения:

Вместо макроса можно использовать метод showToolbar объекта DoCmd. Пример, приведенный на рис. 14.34, может быть выражен в коде VBA следующим образом:

DoCmd ShowToolbar "Главное меню", acToolbarYes,

где AcToolbarYes — встроенная константа.