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

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

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

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

Оцените статью
Добавить комментарий

  1. Борис

    Чётко, кратко, по делу. Спасибо большое за Вашу работу! Очень экономит время.

    Ответить
    1. Дмитрий Якушев автор

      Спасибо, буду добавлять ещё подобных статей.

      Ответить
  2. Эля

    Спасибо, а как указать конкретное имя листа, чтобы не быть постоянно на активном листе?

    Ответить
    1. Дмитрий Якушев автор

      ‘Определяем имя активного листа
      ActiveSheet

      ‘Обращаемся к листу по имени (пользовательскому)
      Worksheets(«Первый лист»)

      ‘Обращаемся к листу по порядковому номеру
      Worksheets(2)

      ‘Обращаемся к листу по имени («системному»)
      Лист1.Name

      Ответить