Excel периодически отключает мою надстройку

У меня есть плагин, который заполняет массив в электронной таблице Excel. Если отправленные параметры неверны, вместо этого он пишет сообщение об ошибке в одной ячейке.

К сожалению, когда подключаемый модуль отображает сообщение об ошибке, Excel эффективно отключает подключаемый модуль. В результате при следующем повторном открытии таблицы я не могу обновить ранее правильно заполненный массив — все ячейки заполнены #ИМЯ?. Также я не могу определить новый массив для заполнения с помощью какой-либо функции из моего плагина - вся категория функций, определенных в плагине, недоступна.

Однако, когда я захожу в «Файл» -> «Параметры» -> «Надстройки», плагин все еще отображается как активный.

Я все еще могу отменить регистрацию плагина через Надстройки -> Управление надстройками Excel, а затем снова зарегистрировать его. Это восстанавливает работоспособность.

Есть ли способ убедиться, что Excel автоматически не отключит мой плагин?


person A-K    schedule 01.05.2014    source источник


Ответы (1)


Excel отключит подключаемый модуль, если он выдаст исключение, либо исключение C++, либо исключение C#, либо исключение SEH.

  • Это потому, что они не должны этого делать, а значит, что-то пошло не так.
  • Когда что-то пошло не так с компьютерной программой, вы не можете быть уверены, что она делает то, что должна делать — она может уничтожить все ваши данные или создать угрозу безопасности.
  • Excel реагирует на это, останавливая что-либо.

Не бросайте исключения. Используйте задокументированный метод для возврата значений ошибок.

Вы не говорите, какой тип плагина - метод у каждого свой.

person Ben    schedule 01.05.2014
comment
Это надстройка Excel, написанная на C#. - person A-K; 02.05.2014
comment
Он не генерирует исключение. Он перехватывает исключение и отображает его сообщение в одной ячейке. - person A-K; 02.05.2014
comment
Попробуйте запустить его в отладчике с включенной опцией «Разрыв всех исключений». Готов поспорить на пиво, что оно выдает исключение. - person Ben; 03.05.2014