2014-01-02 1 views
0

У меня есть файл Excel 2010 (.xlsm), содержащий код в нескольких модулях, включая ThisWorkbook. Модуль ThisWorkbook содержит несколько процедур Event, включая событие _SheetActivate.Excel Crashes при редактировании скрипта в этой книге

У меня есть кнопка на одном листе, которая при нажатии активирует другой лист.

Сегодня после работы на некотором коде в одном из обычных модулей, я нажал на кнопку и получил

Run time error '-2147417848 (80010108)' 
Method 'Activate' of object '_Worksheet' failed. 

Любую попытку активировать другой лист (вручную или программно) происходит сбой приложения.

После некоторых обширных исследований, все я нашел this page что дает дополнительную информацию об ошибке:

-2147417848 (80010108): The object invoked has disconnected from its clients. 

Устранение ошибки не так много беспокойства для меня, потому что мне не нужно, что особенно событие больше. Тем не менее, мне нужно выяснить, почему Excel продолжает сбой. Я попытался удалить код, но Excel разбился. Поэтому я попробовал комментировать код, но Excel все еще разбился. Увы, все, что я пробовал, привело к крушению. Это заставляет меня думать, что в этом модуле что-то должно быть повреждено (код в других модулях работает нормально, но ни одна из других процедур не активирует лист).

Я читал, что вариант состоит в том, чтобы скопировать все (включая код) в новую книгу, но я хотел бы избежать этого, если это возможно, поскольку для этого потребуется скопировать больше, чем текущий лист ... но Я не могу скопировать другие листы без сбоя Excel. Кто-нибудь есть идеи о том, как я могу удалить/удалить код из ThisWorkbook?

+0

удалите его программно –

+0

попробуйте экспортировать все классы/формы/модули, а затем удалить все из них, сохранить как .xlsx. перезапустите excel с этим .xlsx, импортируйте экспортированные, отредактируйте то, что вам нужно, затем сохраните как .xlsm. – PatricK

+0

@Patrick Спасибо за указатели! – ARich

ответ

2

После слишком большого числа сбоев для подсчета я наконец смог решить проблему.

Сначала я скопировал код (Ctrl + C) от ThisWorkbook, который я хотел использовать позже, и вставлял его в пустой файл с записью. Затем я сделал, как предложил Патрик, и экспортировал обычные модули.

На этом этапе я попытался программно удалить код, но Excel снова разбился. Тогда мне стало ясно, что у меня нет , чтобы удалить код вручную или программно; Я просто сохранил файл как документ .xlsx, который по дизайну удаляет код.

Оттуда я закрыл файл, открыл его и импортировал файлы .bas, которые я экспортировал ранее. Последний шаг до того, как я сохранил файл в формате .xlsm, состоял в том, чтобы вставить скопированный код с первого шага назад в ThisWorkbook.

Все работает как очарование. Спасибо за помощь! Ура!

+0

+1 спасибо за закрытие – brettdj

Смежные вопросы