Написал код, который выполняется при открытии файла Excel и создает при этом несколько кнопок пользовательской панели инструментов "Моя панель".
Создается несколько кнопок с привязкой к ним исполняемых ими функций, описанных в одном из модулей, например:
Код: Выделить всё
Set MyBar = Application.CommandBars.Add(Name:="Моя панель", _
Position:=msoBarTop, MenuBar:=False, Temporary:=True)
<далее следует назначение свойств панели MyBar и ее кнопок>
With MyButton(1)
.Caption = "Автозаполнение |"
.TooltipText = "Автозаполнение"
.Style = msoButtonCaption
.OnAction = "Автозаполнение"
End With
<затем описываются другие кнопки>
Я был этим очень удивлен, но делать нечего - ввел обработку (перехват ошибки):
Код: Выделить всё
On Error GoTo ErrorHandler
'----<<Начало блока>>---------
Set MyBar = Application.CommandBars.Add(Name:="Моя панель", _
Position:=msoBarTop, MenuBar:=False, Temporary:=True)
<Назначение свойств панели MyBar и ее кнопок>
‘<...>
Exit Sub
'-----<<Конец блока>>---------
ErrorHandler:
MsgBox "Вероятно, открытие этого файла произошло при каком-то открытом приложении Excel," + _
" отчего могут быть недоступны некоторые запрограммированные функции." + "РЕКОМЕНДАЦИЯ: закройте все Excel-приложения и запустите этот файл снова."
Но еще больше меня удивило другое. Предположим, уже запущено в памяти приложение Excel, и я запускаю свой файл. Появляется окно MsgBox с моей рекомендацией, что говорит о том, что еще в момент установки пользовательской происходит переход на обработку ошибки, и весь оставшийся фрагмент от точки <<Начало блока>> до <<Конец блока>> не исполняется. Но почему же при этом пользовательская панель с привязкой макросов все же появляется? Ведь на этот фрагмент управление программе алгоритмически не передается!