Пользователькая панель конфликтует с уже открытым Excel-документом
Добавлено: 13 фев 2008, 13:46
Может, кто сталкивался с подобным, как решили такую проблему:
Написал код, который выполняется при открытии файла Excel и создает при этом несколько кнопок пользовательской панели инструментов "Моя панель".
Создается несколько кнопок с привязкой к ним исполняемых ими функций, описанных в одном из модулей, например:
Все бы хорошо, но обнаружилось, что если открывать этот файл при каком-либо уже открытом приложении Excel (назовем его Приложение 1), то макросы кнопок (напр. , "Автозаполнение") программой не обнаруживаются, так как приложение его почему-то ищет в том, первом, приложении, а не в своем - появляется сообщение об ошибке: «не найден макрос "Приложение 1.Автозаполнение"».
Я был этим очень удивлен, но делать нечего - ввел обработку (перехват ошибки):
Но это же непорядок!? Как дополнительно указать, что макрос находится в коде моего файла, а не коде "Приложения 1"?
Но еще больше меня удивило другое. Предположим, уже запущено в памяти приложение Excel, и я запускаю свой файл. Появляется окно MsgBox с моей рекомендацией, что говорит о том, что еще в момент установки пользовательской происходит переход на обработку ошибки, и весь оставшийся фрагмент от точки <<Начало блока>> до <<Конец блока>> не исполняется. Но почему же при этом пользовательская панель с привязкой макросов все же появляется? Ведь на этот фрагмент управление программе алгоритмически не передается!
Написал код, который выполняется при открытии файла 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 с моей рекомендацией, что говорит о том, что еще в момент установки пользовательской происходит переход на обработку ошибки, и весь оставшийся фрагмент от точки <<Начало блока>> до <<Конец блока>> не исполняется. Но почему же при этом пользовательская панель с привязкой макросов все же появляется? Ведь на этот фрагмент управление программе алгоритмически не передается!