Прежде всего, необходимо заменить стандартный интерфейс Excel, добавив команды меню и панели инструментов, необходимые для данного приложения, и удалив неиспользуемые команды, строку формул, заголовки строк и столбцов, ярлычки листов.
Скроем видимые панели инструментов, обратившись к свойству Enabled панелей инструментов. При установке данного свойства в значение False панель скрывается с экрана и удаляется из списка панелей, которые пользователь может отобразить при выполнении команды «Настройка…». В приведенном ниже коде скрываются все панели приложения. Данный способ эффективнее, чем обращение к свойству Visible панели инструментов, т.к. при завершении работы приложения при установке Enabled в True будут восстановлены именно те панели, которые были видны при запуске программы.
Dim cb As CommandBar
For Each cb In Application.CommandBars
cb.Enabled = False
Next cb
Далее удалим стандартные элементы интерфейса Excel. Основные объекты, к которым мы обращаемся, объект Application, представляющий приложение в целом, и объект ActiveWindow, который соответствует окну рабочей книги. Данный код лучше оформить в виде отдельной процедуры, получающей в качестве параметра логическое значение – отобразить или убрать соответствующие элементы управления.
With Application
.DisplayFormulaBar = False
.DisplayScrollBars = False
.DisplayStatusBar = False
.Caption = "АРМ"
With .ActiveWindow
.DisplayGridlines = False
.DisplayWorkbookTabs = False
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.Caption = "Управление АЗС"
End With
End With
Добавим панель инструментов и разместим необходимые команды. Ниже представлен внешний вид панели инструментов и программный код, создающий данную панель.
Рис. ХХ. Панель инструментов приложения
Set cmdbar = Application.CommandBars.Add("Management", msoBarTop)
Application.CommandBars.DisableCustomize = True
Dim but As CommandBarButton
With cmdbar
.Protection = msoBarNoCustomize
Set but = .Controls.Add(msoControlButton)
but.OnAction = "Getgaz"
but.Style = msoButtonCaption
but.Caption = "Ïîëó÷èòü áåíçèí"
Set but = .Controls.Add(msoControlButton)
but.OnAction = "Sellgaz"
but.Style = msoButtonCaption
but.Caption = "Ïðîäàòü áåíçèí"
Set but = .Controls.Add(msoControlButton)
but.OnAction = "Changeprice"
but.Style = msoButtonCaption
but.Caption = "Ñìåíèòü öåíû"
…
End With
Первоначально к коллекции CommandBars мы добавляем новый элемент – новую панель инструментов. Коллекция Controls добавленной панели инструментов содержит все элементы управления, расположенные на данной панели. Таким образом, для добавления новых кнопок необходимо добавить к данной коллекции новый элемент. Кроме обыкновенных кнопок на панели инструментов могут находиться более сложные элементы управления (см таблицу).
Значение Type
Возвращаемый класс объекта
msoControlButton (командная кнопка)
CommandBarButton
msoControlEdit (поле редактирования)
CommandBarComboBox
msoControlDropdown (выпадающий список)
CommandBarComboBox
msoControlComboBox (комбинированный список)
CommandBarComboBox
msoControlPopup (контекстное меню)
CommandBarPopup
Действия, выполняемые командой, должны быть запрограммированы в виде процедуры. Для передачи информации в исполняемый макрос можно использовать параметр Parameter, задаваемый при создании элемента или, что удобнее, свойство Parameter. Свойство OnAction, которым обладают все элементы панели, позволяет связать элемент с исполняемым макросом. Формально свойство является строкой, задающей имя макроса, который и будет вызываться в ответ на выбор пользователя.
Описанные выше блоки кода необходимо поместить в обработчик события Workbook_Open, т.е. на открытие рабочей книги. Интерфейс Excel будет заменяться каждый раз при открытии рабочей книги. Очевидно, что при закрытии книги (событие Workbook_BeforeClose) необходимо выполнить обратные действия – восстановить исходный интерфейс. Приложение должно руководствоваться принципом: «Меня здесь не было», т.е. полностью восстановить все параметры, которые оно изменило. Иначе, у пользователя использующего наше приложение и незнающего VBA могут возникнуть значительные проблемы, например, при исчезновении главного меню программы.