Как удалить несколько пустых объектов Microsoft Excel

У меня есть электронная таблица с одним листом с именем «Лист1». Я раскрыл все остальные листы и удалил их. Когда я открываю редактор VBA, в разделе «Объекты Microsoft Excel» у меня перечислено почти 4000 листов, и я не могу удалить их, щелкнув правой кнопкой мыши.

Я считаю, что это приводит к тому, что размер файла слишком велик (~ 6 МБ), когда в «Листе 1» нет данных. Я пробовал использовать метод "goto>special>objects", и таким образом объекты не были найдены.

Любые идеи о том, как очистить все эти пустые объекты?

Проводник VBA


person Phil Downey    schedule 04.04.2012    source источник
comment
Сид, как обычно, прав, но мне любопытно, как вы получили книгу с 4000 листов.   -  person Tony Dallimore    schedule 04.04.2012
comment
Я тоже хочу знать? Я видел некоторые другие сообщения о том, что это происходило в моем исследовании, но я все еще не понимаю, как это произошло на самом деле. Я не несу ответственности за использование листа, просто пытаюсь решить эту конкретную проблему.   -  person Phil Downey    schedule 05.04.2012
comment
У вас установлен Google Desktop?   -  person Siddharth Rout    schedule 05.04.2012
comment
Нет, не знаю. Как это повлияет на вещи?   -  person Phil Downey    schedule 05.04.2012


Ответы (2)


Я думаю, что нашел решение, по крайней мере, оно работает для меня, а я не очень хорошо разбираюсь в VBA. Добавьте окно свойств (в представлении), выберите каждый лист и измените параметр «Видимый» на -1 — xlsheetvisible, он появится в Excel, а затем вы сможете удалить вкладку.

person Raquel S.    schedule 29.08.2012

Есть много способов добиться желаемого. Самый быстрый способ - щелкнуть правой кнопкой мыши на Листе 1 и выбрать «Переместить или скопировать» ~~> «Новая книга» ~~> «ОК».

Теперь вы можете сохранить новую книгу и удалить старую :)

ПОСЛЕДУЮЩИЕ

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

В таком случае попробуйте этот код

Option Explicit

Sub Sample()
    Dim ws As Worksheet

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> "Sheet1" Then ws.Delete
    Next

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

введите здесь описание изображения

person Siddharth Rout    schedule 04.04.2012
comment
К сожалению, это не сработает — у нас есть несколько довольно длинных формул на других листах с точно такой же проблемой, и Excel скопирует из них только первые 255 символов. Кроме того, код VBA в исходном листе не копируется, что требует дополнительных шагов для восстановления каждой электронной таблицы, затронутой этой проблемой. - person Phil Downey; 04.04.2012
comment
Код VBA на исходном листе скопирован, а код VBA из модуля — нет. :) Могу я взглянуть на рабочую тетрадь? Если да, то вы можете загрузить его на wikisend.com и поделиться ссылкой здесь. - person Siddharth Rout; 04.04.2012
comment
Нет, извините, я не могу загрузить его. Вы правы, что код листа будет скопирован, но модули - нет. - person Phil Downey; 04.04.2012
comment
Доступ к ThisWorkbook вызывает ошибку ActiveX. Я попытался получить доступ к активной книге по-другому, и количество листов в указанной книге составляет всего 1. - person Phil Downey; 05.04.2012
comment
Вы запускали приведенный выше код из модуля? Также вы можете опубликовать снимок VBA Project Explorer? - person Siddharth Rout; 05.04.2012
comment
Да. Скриншот добавлен в исходный пост. - person Phil Downey; 05.04.2012