Проблемы
Когда Microsoft Excel загружает надстройку службы автоматизации в режиме редактирования ячейки, Excel завершается сбоем. Эта проблема возникает только с надстройками службы автоматизации, которые были загружены по запросу в Excel.
Причина
Эта проблема может возникнуть, когда надстройка загружается, если надстройка отображает форму или диалоговое окно, или если надстройка отправляет запрос службы автоматизации в Excel, который пытается изменить состояние Excel. В следующем списке приведены примеры запросов службы автоматизации, которые могут привести к сбою Excel при вызове при загрузке надстройки службы автоматизации в режиме редактирования ячейки.
-
Программное изменение текущего выделенного фрагмента. Пример:
Application.ActiveSheet.Range("A1").Select -
Вызовите свойство или метод элемента в коллекции Windows. Пример:
Application.ActiveWindow.Zoom = 200
-
Измените параметр Excel, например режим вычисления. Пример:
Application.CalculationMode = xlManual
Все эти элементы являются примерами попыток кода изменить среду Excel, книгу или лист. Эти типы действий запрещены в режиме редактирования.
Решение
Не выполняйте описанные выше действия во время загрузки надстройки. Методы надстроек, вызываемые во время загрузки, включают метод Initialize, а если надстройка службы автоматизации реализует интерфейс IDTExtensibility2, методы OnConnection и OnStartupComplete.
Статус
Корпорация Майкрософт подтвердила, что это ошибка в продуктах Майкрософт, перечисленных в начале этой статьи.
Дополнительная информация
Действия по воспроизведению проблемы
-
Запустите новый проект ActiveX DLL в Visual Basic.
-
В меню Проект выберите пункт Свойства Project1. Измените имя проекта на TestAddIn и нажмите кнопку ОК.
-
Добавьте следующий код в модуль кода для Class1:
Private Sub Class_Initialize() MsgBox "Class_Initialize"End Sub
-
Сборка TestAddIn.dll.
-
В Excel запустите новую книгу.
-
В Microsoft Office Excel 2003 или Microsoft Excel 2002 выполните следующие действия.
-
В меню Сервис наведите указатель мыши на пункт Надстройки, а затем выберите пункт Автоматизация.
-
В списке щелкните TestAddIn.Class1 и нажмите кнопку ОК.
-
В диалоговом окне Надстройки нажмите кнопку ОК.
В Microsoft Office Excel 2007 выполните следующие действия.
-
Нажмите кнопку Microsoft Office и выберите ПунктПараметры Excel.
-
Перейдите на вкладку Надстройки .
-
В списке Управление щелкните Надстройки Excel, а затем нажмите кнопку Go.
-
В диалоговом окне Надстройки щелкнитеАвтоматизация.
-
В списке щелкните TestAddin.Class1 и нажмите кнопку ОК.
-
Нажмите кнопку ОК.
-
-
Введите =a в любой ячейке. Появится окно сообщения с текстом "Class_Initialize".
-
Нажмите кнопку ОК, чтобы закрыть окно сообщения. Через несколько секунд Excel завершается сбоем.
Ссылки
Для получения дополнительных сведений щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:
291392 INFO: надстройки COM и надстройки службы автоматизации Excel