Проект Excel VBA создал несколько объектов Workbook

Я отвечаю за очень большую электронную таблицу Excel 2010 со ссылками на все виды внешних источников данных, включая Bloomberg, 65 листов с модулями vba и ссылки на другие надстройки vba.

Я заметил, что проект VBA приобрел несколько объектов Workbook.

Там есть стандартный ThisWorkbook. Тем не менее, ряд рабочих листов также был превращен в объекты рабочей книги Excel, оставив исходный лист в виде копии предыдущего, за вычетом кода.

Это, по-видимому, не результат каких-либо действий. Действительно, я не думал, что возможно иметь более одного объекта Workbook!

Например, у меня был один рабочий лист, называемый wksInputs, который теперь превращен в объект Workbook, а исходный wksInputs теперь называется wksInputs1.

пример

Я не могу удалить объект рабочей книги wksInputs.

Пожалуйста, кто-нибудь может объяснить, что здесь происходит, и как я могу решить проблему …?

Большое спасибо.

Эта проблема возникла в моем коде, когда я передал лист в Sub как параметр, например:

Вызов BuildCodeStrings (Sheet2, sAccount)
Sub BuildCodeStrings (wsSource As Worksheet, s As String)

Чтобы исправить эту проблему, я создал новую книгу, скопировал все данные из всех законных листов в моем оригинале в одноименные листы в моей новой книге. Затем скопировал весь код из оригинала в новую книгу.

Затем я сменил вызов подпрограммы на

Вызовите BuildCodeStrings («IC Accounts», sAccounts)
Sub BuildCodeStrings (sSource As String, s As String)

и добавила одну строку кода в мою подпрограмму BuildCodeString:

Установите wsSource = ThisWorkbook.Sheets (sSource)

Я не знаю, в чем причина этой проблемы, но это обходное решение сработало для меня.

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

ПРИМЕЧАНИЕ. Исходный поврежденный файл был сохранен как .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.

Надеюсь, что кто-то найдет это полезным 🙂

  • Множественная замена или замена текста в Excel с использованием таблицы
  • Как вызвать макрос VBA из AHK в Excel при редактировании ячейки?
  • Excel - Получение имен в диаграмме
  • Добавьте условие к этой формуле INDEX MATCH, если оно вернет # N / A
  • VBA Join Ranges
  • Excel - как я могу заполнить sheet1 соответствующими данными из листа2
  • Как использовать условное форматирование в ячейке с выпадающим списком?
  • Как искать несколько критериев в VBA?
  • Изменение чисел в два разных интервала
  • vlookup для несортированных данных не работает
  • Групповые данные, предпочтительно с одинаковым количеством элементов в каждой группе
  • Interesting Posts
    Давайте будем гением компьютера.