4

Excel 2010 Professional Plus (32 бита), по-видимому, создал новый набор рабочих листов и переименовал все оригинальные рабочие листы на экране VBA, например, Sheet10 становится Sheet101, Sheet13 становится Sheet131. Это заставляет UDF перестать функционировать. "Новый" "sheet10" и "sheet13", кажется, не существует нигде, кроме как в окне проекта VBA. "Новые" листы имеют синий значок рядом с ними.

UDF работает. Пока эти новые листы не созданы и старые листы не переименованы. В файле Excel всего 12 листов и одна книга. VBAproject показывает 2 рабочих книги и 20 рабочих листов.

1) Что вызывает это?
2) Как я могу это исправить?
3) Как это можно предотвратить?

Эти синие значки слева на самом деле не существуют

Добавлены изображения, показывающие свойства несуществующего "sheet3" и свойства реального листа "sheet31". Все несуществующие листы и книги имеют длинный список свойств.

Sheet3-несуществующим Sheet31-существует

XLS файл здесь Вам нужно будет скачать его, так как он открывается в Google Viewer.

ОБНОВЛЕНИЕ: 06.01.2016 Итак, на сегодняшний день все формулы в этом XLS являются ошибками (#VALUE), когда я его открывал. Excel не создал несуществующие листы, как видно из моего последнего обновления. На прошлой неделе XLS и формулы работали, и я не внес никаких изменений. Это новая рабочая тетрадь, в которую я скопировал все листы, как указано в постах ниже. Исходная рабочая книга (та, что показана в пикселе с несуществующими рабочими таблицами) не содержит ошибок #VALUE. Обе книги находятся на одном компьютере и были обновлены вместе за последний месяц + для целей сравнения.

ОБНОВЛЕНИЕ 3, 06.01.2016 Я просто случайно переместил текстовую ячейку, затем нажал «Отменить», и все ошибки # ЗНАЧЕНИЕ исчезли, и теперь у меня все правильные вычисления. WTF.

3 ответа3

1

Ключом к вашей проблеме является окно сообщения «Ошибка автоматизации.Катастрофическая неудача ".

Там нет ни одной диагностики для этого, однако это может быть ....

  • Случай 1

Если рабочая книга пытается запустить макрос, содержащий объекты, которые они не включены в раздел ссылок редактора VBA, может возникнуть такая ошибка.

Например, если для правильной регистрации на ПК требуется определенная DLL. Если эти библиотеки DLL на вашем компьютере, то с книгой все в порядке, но на другом компьютере без библиотек DLL это произойдет.

Любой проект будет включать следующее по умолчанию:

Visual Basic For Applications
Microsoft Excel x.0 Object Library
OLE Automation
Microsoft Office x.0 Object Library
and possibly if a form has ever been added -
Microsoft Forms 2.0 Object Library

Где x - версия Excel.

Вы открывали и модифицировали макрос на другом ПК, прежде чем запускать его на этом?

Это так, тогда ссылки были обновлены до версии другой системы, и они не найдены в вашей системе.

  • Дело 2

Одна из ваших UDF вызывает проблему. Пересмотрите проблему и проверьте функцию, выделенную желтым цветом.

В соответствии с изображениями, которые вы разместили, проблема заключается в Sumbytext(rg as Range,ltr as String)as Double . Ты должен:

  • Проследите логику UDF шаг за шагом, чтобы найти, где он может быть неисправен.
  • В именованном диапазоне "List_HolAbbr" всегда есть значения? Который?
  • UDF получает диапазон по переменной rg . Всегда ли допустимый диапазон?
  • Поскольку они используют целочисленные значения, почему Sumbytest и MidResult определены как Double?
0

Повторное размещение моего решения из этой другой темы.

Вот мое решение, оно работает согласованно, и вам не нужно вручную копировать листы и код в пустую книгу. Я тестировал этот метод на нескольких поврежденных книгах, которые при запуске выдали ошибку «Ошибка автоматизации - катастрофический сбой».

ПРИМЕЧАНИЕ. Исходный поврежденный файл был сохранен в формате .xlsm.

  1. Откройте пустую книгу Excel
  2. Вкладка «Разработчик»> «Безопасность макросов»> Отключить все макросы без уведомления
  3. Закрыть Excel
  4. Дважды щелкните поврежденный файл, например, MyFile.xlsm.
  5. Файл> Сохранить как ...> MyFile.xlsb (не .xlsm), выбор формата .xlsb - вот что помогает
  6. Вкладка «Разработчик»> «Безопасность макросов»> «Включить все макросы (или любой другой уровень безопасности»)
  7. Закрыть Excel
  8. Дважды щелкните MyFile.xlsb

Файл теперь исправлен! При необходимости вы можете повторно сохранить файл MyFile.xlsb как .xlsm. По моему опыту, файлы .xlsm довольно легко повреждаются, поэтому я привыкну всегда использовать формат .xlsb.

Надеюсь, кто-нибудь найдет это полезным :)

0

Мое решение похоже на решение .xlsb, опубликованное @Scoox (спасибо!) но пришлось изменить его, потому что я не могу изменить настройки макроса на моем рабочем компьютере:

  1. Сделайте копию всех макросов в текстовых файлах
  2. Сохраните поврежденный файл как .xlsx и закройте
  3. Заново откройте файл, сохраните как .xlsb и закройте
  4. Вставить все макросы в файл .xlsb

Не идеально, но работает для меня!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .