Для удаления всех листов в книге Excel, кроме указанного одного или текущего активного листа, вы можете справиться с этим, как показано ниже.
Удалить все листы, кроме указанного с кодом VBA
Один щелчок, чтобы удалить все листы, кроме текущего активного с Kutools for Excel
Удалить все листы, кроме указанного с кодом VBA
С помощью приведенного ниже кода VBA вы можете удалить весь лист в книге, кроме определенного в Excel.
1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Приложение Microsoft Visual Basic окно.
2. Нажмите Вставить > Модули, затем скопируйте и вставьте ниже код VBA в окно модуля.
Код VBA: удалить все листы, кроме указанных
Sub DeleteSheets1()
Dim xWs As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In Application.ActiveWorkbook.Worksheets
If xWs.Name <> "Sheet1" And xWs.Name <> "Sheet2" Then
xWs.Delete
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Заметки:
1. «Sheet1(Основной ключ) и Sheet2»- это листы, которые вы хотите сохранить в текущей книге. Вы можете изменить их в зависимости от ваших потребностей.
2. Если вы хотите удалить все, но оставить больше листов, добавьте код И xWs.Name <> «имя вашего листа« до Затем слово в шестой строке кода. Такие как:
Если xWs.Name <> «Sheet1» и xWs.Name <> «Sheet2» И xWs.Name <> «имя вашего листа» Затем
3. Если вы хотите оставить только один лист и удалить все из книги, удалите все И, условие в коде. Например, чтобы сохранить Sheet1 в текущей книге, вам нужно изменить код шестой строки на: Если xWs.Name <> «Sheet1» Тогда
Удалить все листы, кроме текущего активного, с помощью Kutools for Excel (Только один клик)
YВы можете легко удалить все листы, кроме текущего активного листа, одним щелчком мыши. Удалить все неактивные листы полезности Kutools for Excel.
1. Нажмите Кутулс Плюс > Рабочий лист > Удалить все неактивные листы.
3. Затем появится диалоговое окно. Если вы решили удалить все листы, кроме активного, нажмите кнопку OK кнопку, в противном случае нажмите кнопку Отмена кнопку.
Затем удаляются все листы, кроме текущего активного в вашей книге.
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Добавить текст в середине выделенных ячеек с помощью Kutools for Excel
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (1)
Оценок пока нет. Оцените первым!
— Если у листа, который Вы планируете удалить, значение свойства Visible установлено как xlVeryHidden/xlSheetVeryHidden, то попытка его удаления приведёт к ошибке, которую можно избежать, если перед удалением сделать лист видимым, т.е. установить значение свойства Visible = True/xlSheetVisible
— После удаления листа, в рабочей книге должен остаться,
как минимум, один видимый лист
— Нельзя удалить лист, если рабочая книга является общей
— Нельзя удалить лист, если структура рабочей книги защищена
Добавлено через 7 минут
это то что по правилам,
а ксательно вашего примера вы подсчитываете количество листов, а удалять хотите по его индексу
Visual Basic | ||
|
Skip to content
Как удалить все листы, кроме активного
На чтение 2 мин. Просмотров 3.9k.
Что делает макрос: Макрос может удалить все листы, кроме активного рабочего листа.
Содержание
- Как макрос работает
- Код макроса
- Как работает код
- Как использовать
Как макрос работает
Этот макрос с помощью цикла пробегает по всем рабочим листам и проверяет на соответствие имени каждого рабочего листа, имя активного листа. Каждый раз, когда имя не совпадает, он удаляет лист. Обратите внимание на использование метода DisplayAlerts на шаге 4 (отключаем предупреждения Excel, чтобы не подтверждать каждое удаление).
Код макроса
Sub UdalitVseListiKromeAktivnogo() 'Шаг 1: Объявляем переменные Dim ws As Worksheet 'Шаг 2: Запускаем цикл по всем рабочим листам For Each ws In ThisWorkbook.Worksheets 'Шаг 3: Проверяем имя каждого рабочего листа If ws.Name <> ThisWorkbook.ActiveSheet.Name Then 'Шаг 4: Выключаем предупреждения Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True End If 'Шаг 5: Переходим на следующий рабочий лист Next ws End Sub
Как работает код
- Объявляем переменную WS, которая будет хранить имя каждого листа.
- На шаге 2 макрос начинает цикл по всем рабочим листам в этой книге. Существует разница между ThisWorkbook и ActiveWorkbook. Объект ThisWorkbook относится к книге, в которой написан код макроса. ActiveWorkbook относится к книге, которая в данный момент активна. Они часто возвращают один и тот же объект, но, если рабочая книга работает, а код находится не в активной рабочей книге, они возвращают различные объекты. В этом случае, мы не хотим рисковать удалением листов в других книгах, так что мы используем ThisWorkbook.
- На этом этапе сравниваем активное имя листа с листом, который определяется с помощью цикла.
- Если имена листов различны, макрокоманда удаляет лист. Мы используем DisplayAlerts, чтобы подавить любые проверки подтверждения из Excel (чтобы не появлялось системное сообщение с вопросом: «Вы действительно хотите удалить лист?»)
- На шаге 5, переходим к следующему листу книги и повторяем проверку снова. После того, как пробежались по всем листам, макрос завершается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код во вновь созданном модуле.
Обратите внимание, что при использовании ThisWorkbook в макросе вместо ActiveWorkbook, вы не сможете запустить макрос из личных макросов. Это потому, что ThisWorkbook относится к Personal Macro Workbook, а не рабочей книги, к которому следует применить макрос.
I had a problem with removing unnecessary sheets. I looked at different forums and mashed up together different solutions.
This macro removes sheets (except first sheet).
Sub wrong()
Dim sht As Object
Application.DisplayAlerts = False
For Each sht In ActiveWorkbook.Sheets
If sht.Index <> 1 Then
sht.Delete
End If
Next
End Sub
Is this solution ok or it can be improved? I also tried actions directly on objects (workbooks, worksheets), but i failed each time
asked Apr 7, 2017 at 9:14
1
your code would work (but that you could have discovered by yourself!)
You could avoid the If-Then-End
If by looping through sheets index directly from the last one to the 2nd one, as follows
Option Explicit
Sub wrong()
Dim i As Long
Application.DisplayAlerts = False
With Sheets '<--| reference active workbook 'Sheets' collection
For i = .Count To 2 Step -1 '<--| loop through referenced sheets index from last to the 2nd
.Item(i).Delete '<--| delete current index sheet
Next
End With
Application.DisplayAlerts = True
End Sub
answered Apr 7, 2017 at 9:19
user3598756user3598756
28.8k4 gold badges17 silver badges28 bronze badges
2
There is nothing wrong in your code. The code will delete all the sheets from the ActiveWorkbook except the first sheet.
You should declare sht as Worksheet as you know that this variable refers to the Worksheet object.
Another point is you are looping through all the sheets of ActiveWorkbook.Sheets, that means if the code is run, it will delete the sheets from the workbook which is currently active.
If you loop through ThisWorkbook.Sheets, it will delete the sheets from only the workbook which contains this code.
Sub DeleteAllSheetsButFirst()
Dim sht As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sht In ActiveWorkbook.Sheets
If sht.Index <> 1 Then
sht.Delete
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
The code above will delete the sheets based on their index number i.e. their position in the workbook, not based on the sheet names.
answered Apr 7, 2017 at 9:28
1
Another way. This is basically pseudocode but the logic is clear. It stops automatically once you’re down to sheet1.
sub right()
dim wkb as excel.workbook
set wkb = workbooks.add ' or open or whatever
application.displayalerts = false
do while wkb.sheets.count > 1
wkb.sheets(wkb.sheets.count).delete
loop
application.displayalerts = true
end sub
answered Apr 7, 2017 at 10:24
WinterknellWinterknell
5853 silver badges6 bronze badges
- Что делает макрос
- Код макроса
- Как работает макрос
- Как использовать
- Скачать файл
Ссылка на это место страницы:
#zadacha
Макрос может удалить все листы, кроме активного рабочего листа. Этот макрос с помощью цикла пробегает по всем рабочим листам и сверяет имя рабочего листа с именем активного листа. Каждый раз, когда имя не совпадает, он удаляет лист. Обратите внимание на использование метода DisplayAlerts на шаге 4 (отключаем предупреждения Excel, чтобы не подтверждать каждое удаление).
Ссылка на это место страницы:
#formula
Sub
UdalitVseListiKromeAktivnogo()
Dim
ws
As
Worksheet
For
Each
ws
In
ThisWorkbook.Worksheets
If
ws.Name <> ThisWorkbook.ActiveSheet.Name
Then
Application.DisplayAlerts =
False
ws.Delete
Application.DisplayAlerts =
True
End
If
Next
ws
End
Sub
Ссылка на это место страницы:
#kak
1. Объявляем переменную WS, которая будет хранить имя каждого листа.
2. На шаге 2 макрос начинает цикл по всем рабочим листам в этой книге. Существует разница между ThisWorkbook и ActiveWorkbook. Объект ThisWorkbook относится к книге, в которой написан код макроса. ActiveWorkbook относится к книге, которая в данный момент активна. Они часто возвращают один и тот же объект, но, если рабочая книга работает, а код находится не в активной рабочей книге, они возвращают различные объекты. В этом случае, мы не хотим рисковать удалением листов в других книгах, так что мы используем ThisWorkbook.
3. На этом этапе сравниваем активное имя листа с листом, который определяется с помощью цикла.
4. Если имена листов различны, макрокоманда удаляет лист. Мы используем DisplayAlerts, чтобы подавить любые проверки подтверждения из Excel (чтобы не появлялось системное сообщение с вопросом: «Вы действительно хотите удалить лист?»)
5. На шаге 5, переходим к следующему листу книги и повторяем проверку снова. После того, как пробежались по всем листам, макрос завершается.
Обратите внимание, что при использовании ThisWorkbook в макросе вместо ActiveWorkbook, вы не сможете запустить макрос из личных макросов. Это потому, что ThisWorkbook относится к Personal Macro Workbook, а не рабочей книги, к которой следует применить макрос.
Ссылка на это место страницы:
#touse
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
Ссылка на это место страницы:
#file
Файлы статей доступны только зарегистрированным пользователям.
1. Введите свою почту
2. Нажмите Зарегистрироваться
3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Подписывайтесь на нас в соц.сетях: