Как удалить все листы в excel кроме одного vba

Для удаления всех листов в книге 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-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (1)


Оценок пока нет. Оцените первым!

— Если у листа, который Вы планируете удалить, значение свойства Visible установлено как xlVeryHidden/xlSheetVeryHidden, то попытка его удаления приведёт к ошибке, которую можно избежать, если перед удалением сделать лист видимым, т.е. установить значение свойства Visible = True/xlSheetVisible
— После удаления листа, в рабочей книге должен остаться,

как минимум, один видимый лист

— Нельзя удалить лист, если рабочая книга является общей
— Нельзя удалить лист, если структура рабочей книги защищена

Добавлено через 7 минут
это то что по правилам,
а ксательно вашего примера вы подсчитываете количество листов, а удалять хотите по его индексу

Visual Basic
1
Worksheets(Array("Лист2", "Лист3", "Лист4")).Delete

Skip to content

Как удалить все листы, кроме активного

На чтение 2 мин. Просмотров 3.9k.

Что делает макрос: Макрос может удалить все листы, кроме активного рабочего листа.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает код
  4. Как использовать

Как макрос работает

Этот макрос с помощью цикла пробегает по всем рабочим листам и проверяет на соответствие имени каждого рабочего листа, имя активного листа. Каждый раз, когда имя не совпадает, он удаляет лист. Обратите внимание на использование метода 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

Как работает код

  1. Объявляем переменную WS, которая будет хранить имя каждого листа.
  2. На шаге 2 макрос начинает цикл по всем рабочим листам в этой книге. Существует разница между ThisWorkbook и ActiveWorkbook. Объект ThisWorkbook относится к книге, в которой написан код макроса. ActiveWorkbook относится к книге, которая в данный момент активна. Они часто возвращают один и тот же объект, но, если рабочая книга работает, а код находится не в активной рабочей книге, они возвращают различные объекты. В этом случае, мы не хотим рисковать удалением листов в других книгах, так что мы используем ThisWorkbook.
  3. На этом этапе сравниваем активное имя листа с листом, который определяется с помощью цикла.
  4. Если имена листов различны, макрокоманда удаляет лист. Мы используем DisplayAlerts, чтобы подавить любые проверки подтверждения из Excel (чтобы не появлялось системное сообщение с вопросом: «Вы действительно хотите удалить лист?»)
  5. На шаге 5, переходим к следующему листу книги и повторяем проверку снова. После того, как пробежались по всем листам, макрос завершается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.

Обратите внимание, что при использовании 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

FatBatman's user avatar

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

user3598756's user avatar

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

Subodh Tiwari sktneer's user avatar

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

Winterknell's user avatar

WinterknellWinterknell

5853 silver badges6 bronze badges

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

Макрос может удалить все листы, кроме активного рабочего листа. Этот макрос с помощью цикла пробегает по всем рабочим листам и сверяет имя рабочего листа с именем активного листа. Каждый раз, когда имя не совпадает, он удаляет лист. Обратите внимание на использование метода DisplayAlerts на шаге 4 (отключаем предупреждения Excel, чтобы не подтверждать каждое удаление).

Ссылка на это место страницы:
#formula

  1. Sub UdalitVseListiKromeAktivnogo()
  2. Dim ws As Worksheet
  3. For Each ws In ThisWorkbook.Worksheets
  4. If ws.Name <> ThisWorkbook.ActiveSheet.Name Then
  5. Application.DisplayAlerts = False
  6. ws.Delete
  7. Application.DisplayAlerts = True
  8. End If
  9. Next ws
  10. 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. 

Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.

Подписывайтесь на нас в соц.сетях:

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как удалить все концевые сноски в word сразу
  • Как удалить все листы excel макрос от до
  • Как удалить все комментарии excel
  • Как удалить все кроме таблицы в excel
  • Как удалить все колонтитулы в документе word 2010

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии