Макрос удалил все листы в excel

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, а не рабочей книги, к которому следует применить макрос.

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

1

17.12.2016, 12:02. Показов 4026. Ответов 2


Студворк — интернет-сервис помощи студентам

Здравствуйте. Нашел макрос но у меня что-то не хочет работать, помогите человеку далекому от программирования.

Код

Sub RemoveHiddenSheets()
    Dim ws As Worksheet
    Dim arrSheets As Variant
    ReDim arrSheets(0) As String
    
    With ActiveWorkbook
        MsgBox "Всего листов до удаления скрытых:  " & .Worksheets.Count
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        
        For Each ws In .Worksheets
            If ws.Visible <> xlSheetVisible Then
                arrSheets(UBound(arrSheets)) = ws.Name
                ReDim Preserve arrSheets(UBound(arrSheets) + 1)
            End If
        Next ws
      ReDim Preserve arrSheets(UBound(arrSheets) - 1)
        .Worksheets(arrSheets).Delete
        
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        MsgBox "Всего листов после удаления скрытых:  " & .Worksheets.Count
    End With
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

17.12.2016, 13:29

2

lapin9126,

Visual Basic
1
2
3
4
5
6
7
8
9
Sub DeleteAllSheets()
Dim s As Object
  On Error Resume Next
  Application.DisplayAlerts = False
  For Each s In Sheets
    If Not s Is ActiveSheet Then s.Visible = xlSheetVisible: s.Delete
  Next
  Application.DisplayAlerts = True
End Sub

Учтите, что этот макрос удалит ВСЕ листы, кроме текущего, включая скрытые, очень скрытые, диаграммы, листы макросов.
Макрос из #1 удаляет только скрытые рабочие листы.



1



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

17.12.2016, 13:36

 [ТС]

3

То что нужно, СПАСИБОООООООО!!!!!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

17.12.2016, 13:36

3

Удалить все листы в книге кроме некоторых

Автор SergioGach, 10.05.2011, 23:00

« назад — далее »

Добрый день!
Не подскажете, как можно решить подобную задачу:
В книге есть листы ( разное количество, каждый раз разные имена), нужно удалить все кроме некоторих (имена которых известны и постоянны).

Например: Есть 3 листа (имя постоянное), макрос копирует еще n-ое (3 или 5 или 15) количество листов (имена разные, неизвестные).
Печатаем книгу, сохраняем. Следующий макрос удаляет все листы кроме первих трех.

Спасибо!


примерно так:

Sub Del3Sheets()
    Dim s As Object, a As Variant, i As Integer, d As Boolean
    a = Array("SheetName1", "SheetName2", "SheetName3")
    Application.DisplayAlerts = False
    For Each s In Sheets
        d = True
        For i = LBound(a) To UBound(a)
            If s.Name = a(i) Then d = False
        Next i
        If d Then s.Delete
    Next s
    Application.DisplayAlerts = True
End Sub


Спасибо! Работает так как нужно :D


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Удалить все листы в книге кроме некоторых

Создание, копирование, перемещение и удаление рабочих листов Excel с помощью кода VBA. Методы Sheets.Add, Worksheet.Copy, Worksheet.Move и Worksheet.Delete.

Создание новых листов

Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.

Синтаксис метода Sheets.Add

expression.Add [Before, After, Count, Type]

где expression — переменная, представляющая собой объект Sheet.

Компоненты метода Sheets.Add

  • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
  • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
  • Count — необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию — 1).
  • Type — необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию — xlWorksheet.

*Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.

**Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.

Примеры создания листов

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

‘Создание рабочего листа:

Sheets.Add

Worksheets.Add

ThisWorkbook.Sheets.Add After:=ActiveSheet, Count:=2

Workbooks(«Книга1.xlsm»).Sheets.Add After:=Лист1

Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(1)

Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(«Лист1»)

‘Создание нового листа с заданным именем:

Workbooks(«Книга1.xlsm»).Sheets.Add.Name = «Мой новый лист»

‘Создание диаграммы:

Sheets.Add Type:=xlChart

‘Добавление нового листа перед

‘последним листом рабочей книги

Sheets.Add Before:=Sheets(Sheets.Count)

‘Добавление нового листа в конец

Sheets.Add After:=Sheets(Sheets.Count)

  • Лист1 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
  • Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.

Создаваемый лист можно присвоить объектной переменной:

Dim myList As Object

‘В активной книге

Set myList = Worksheets.Add

‘В книге «Книга1.xlsm»

Set myList = Workbooks(«Книга1.xlsm»).Worksheets.Add

‘Работаем с переменной

myList.Name = «Listok1»

myList.Cells(1, 1) = myList.Name

‘Очищаем переменную

Set myList = Nothing

Если создаваемый лист присваивается объектной переменной, он будет помещен перед активным листом. Указать дополнительные параметры невозможно.

Копирование листов

Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.

Синтаксис метода Worksheet.Copy

expression.Copy [Before, After]

где expression — переменная, представляющая собой объект Worksheet.

Компоненты метода Worksheet.Copy

  • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
  • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.

*Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.

Примеры копирования листов

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

‘В пределах активной книги

‘(уникальные имена листов)

Лист1.Copy After:=Лист2

‘В пределах активной книги

‘(имена листов на ярлычках)

Worksheets(«Лист1»).Copy Before:=Worksheets(«Лист2»)

‘Вставить копию в конец

Лист1.Copy After:=Sheets(Sheets.Count)

‘Из одной книги в другую

Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Copy _

After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1»)

‘Один лист активной книги в новую книгу

Лист1.Copy

‘Несколько листов активной книги в новую книгу*

Sheets(Array(«Лист1», «Лист2», «Лист3»)).Copy

‘Все листы книги с кодом в новую книгу

ThisWorkbook.Worksheets.Copy

* Если при копировании в новую книгу нескольких листов хотя бы один лист содержит умную таблицу — копирование невозможно. Один лист, содержащий умную таблицу, копируется в новую книгу без проблем.

Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

Перемещение листов

Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.

Синтаксис метода Worksheet.Move

expression.Move [Before, After]

где expression — переменная, представляющая собой объект Worksheet.

Компоненты метода Worksheet.Move

  • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
  • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.

*Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.

Примеры перемещения листов

Простые примеры перемещения листов:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

‘В пределах активной книги

‘(уникальные имена листов)

Лист1.Move After:=Лист2

‘В пределах активной книги

‘(имена листов на ярлычках)

Worksheets(«Лист1»).Move Before:=Worksheets(«Лист2»)

‘Размещение после последнего листа:

Лист1.Move After:=Sheets(Sheets.Count)

‘Из одной книги в другую

Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Move _

After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1»)

‘В новую книгу

Лист1.Move

Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:

Sub Peremeshcheniye()

Dim x

x = InputBox(«Введите имя или номер листа», «Перемещение листа «Лист4»»)

If IsNumeric(x) Then x = CLng(x)

Sheets(«Лист4»).Move Before:=Sheets(x)

End Sub

Удаление листов

Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete

Синтаксис метода Worksheet.Delete

expression.Delete

где expression — переменная, представляющая собой объект Worksheet.

Примеры удаления листов

‘По уникальному имени

Лист1.Delete

‘По имени на ярлычке

Worksheets(«Лист1»).Delete

‘По индексу листа

Worksheets(1).Delete

‘В другой книге

Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Delete

Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

Как обратиться к рабочему листу, переименовать, скрыть или отобразить его с помощью кода VBA Excel, смотрите в этой статье.

To be specific, I want to delete all sheets except Sheet6 which is the code name of a sheet, but I can’t seem to make my code work.

  Dim ws As Worksheet

  For Each ws In ThisWorkbook.Worksheets
  If ws <> ThisWorkbook.Sheet6 Then

      Application.DisplayAlerts = False
      ws.Delete
      Application.DisplayAlerts = True

  End If

  Next ws

asked Jul 14, 2018 at 9:36

Sebastian Ong's user avatar

try

Dim ws As Worksheet

Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
    If ws.CodeName <> "Sheet6" Then ws.Delete
Next
Application.DisplayAlerts = True

answered Jul 14, 2018 at 9:41

DisplayName's user avatar

DisplayNameDisplayName

13.2k2 gold badges11 silver badges19 bronze badges

1

Here’s an alternate with no vars.

application.displayalerts = false

with ThisWorkbook
    if .worksheets("sheet6").index > 1 then _
        .worksheets("sheet6").move before:=.sheets(1)
    do while .sheets.count > 1
        .sheets(2).delete
    loop
end with

application.displayalerts = true

answered Jul 14, 2018 at 12:38

When deleting, always iterate backwards (although Jeeped’s answer has a different way of addressing this).

    Dim iterator as long
    Application.DisplayAlerts = False
    For iterator = ThisWorkbook.Worksheets.Count To 1 Step -1
        With ThisWorkbook.Worksheets(iterator)
            if .CodeName <> "Sheet6" Then .Delete
        End With
    Next iterator
    Application.DisplayAlerts = True

answered Jul 14, 2018 at 21:28

AJD's user avatar

AJDAJD

2,3702 gold badges12 silver badges22 bronze badges

Приходилось ли Вам когда-нибудь удалять листы в рабочей книге приложения Excel? Скорее всего, что да! Согласитесь, незамысловатая операция, если необходимо выборочно удалить несколько листов. Независимо от версии Excel щелкнул правой кнопкой мыши по нужному (а точнее говоря ненужному) листу, нажал «Удалить» в контекстном меню, подтвердил удаление — и всего делов то, три нажатия кнопки мыши! Задача усложняется, когда нужно выборочно удалить от десяти листов и более. Удаление листов становится длительным и утомительным занятием. 

Как вручную удалить лист/листы в книге Excel 2003/2007/2010/2013/2016?

Для удаления одного или нескольких листов из рабочей книги проще всего использовать команду «Удалить» из контекстного меню. Кстати говоря, не все знают, что удалять листы можно используя клавиши Ctrl и Shift. Удерживая клавишу Shift, можно выделить диапазон листов, подлежащих удалению и удалить их разом. Аналогично можно использовать клавишу Ctrl, удерживать ее, выбирая листы для удаления, после чего удалить все выделенные листы разом.

Как выборочно удалять листы при помощи надстройки?

Для тех случаев, когда удаляемые листы должны удовлетворять каким-либо условиям, помогает макрос (надстройка) позволяющая выборочно удалять листы. Надстройка позволяет на выбор пользователя:

1) Мгновенно удалить все листы за исключением активного;

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

2) Удалить листы с заданным шагом, например, каждый второй, третий, четвертый, пятый… n-ый лист рабочей книги.

vyborochnoe-udalenie-listov

3) Удалить листы по маске (по шаблону), используя специальные символы совпадения.

Видео по работе с надстройкойsmotret-video

Udalenie listov

CompleteSolutionнадстройка (макрос) для выборочного удаления листов

При использовании подобных макросов будьте внимательны. Опробуйте действие макроса на тестовом файле, убедитесь тот ли результат Вы хотели получить, после обработки файлов с данными, пересохраняйте их под другими именами во избежании случайной потери данных. Отменить действие макроса можно далеко не всегда.

Если Вы никогда не имели дел с макросами и надстройками, предлагаю Вам ознакомится с тем как установить надстройку на свой компьютер.

Другие материалы по теме:

На чтение 3 мин. Просмотров 21 Опубликовано 12.05.2021

Большинство команд Excel доступны для использования в ваших макросах при условии, что вы знаете правильные команды VBA для выполнения поставленной задачи. Вы можете использовать следующую макрос-команду для удаления активного листа:

 ActiveSheet.Delete 

Если вы введете команду в своем макросе, вы обнаружите, что Excel приостанавливает макрос и спросит вас, уверены ли вы, что хотите удалить рабочий лист. Когда вы нажимаете «Да», рабочий лист удаляется и макрос возобновляется.

Вся идея макросов, конечно же, состоит в том, чтобы автоматизировать многие задачи, которые вы выполняете на регулярной основе. Остановка и запрос подтверждения могут быть безопасным способом, но это мало помогает делу автоматизации. Если вы хотите, чтобы рабочий лист удалялся без пауз, вы можете сделать несколько вещей. Во-первых, вы можете использовать метод SendKeys для имитации нажатия клавиши Enter , что аналогично нажатию Да в диалоговом окне подтверждения. Все, что вам нужно сделать, это добавить одну строку перед строкой, удаляющей рабочий лист:

 Application.SendKeys ("{ENTER}") ActiveSheet.Delete 

SendKeys ничего не делает, кроме как записывает нажатия клавиш в буфер клавиатуры, как если бы вы набирали их с клавиатуры. Таким образом, строка SendKeys должна предшествовать строке Delete, чтобы нажатие клавиши Enter находилось в буфере до того, как оно понадобится.

Любой давний разработчик макросов может указать несколько потенциальные проблемы с использованием SendKeys, основная проблема заключается в том, что вы не можете использовать его, чтобы указать, что вы принимаете опцию Да в диалоговом окне подтверждения, и только в этом диалоговом окне. Однако маловероятно, что если в нужный момент появится другое диалоговое окно (возможно, созданное другой программой), нажатие клавиши Enter будет применено к этому диалоговому окну, а не к тому, которое вы ожидается.

Лучшее решение – отключить на короткое время функции предупреждений в Excel. Рассмотрим следующий код макроса:

 Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = True 

Этот код отключает предупреждения, удаляет рабочий лист, а затем включает оповещения снова включены. Пока они выключены, Excel не будет отображать диалоговое окно подтверждения, а будет действовать так, как если бы оно было отображено и был выбран вариант по умолчанию (Да).

Важно запомнить последнюю строку кода, показанного здесь. Если вы не установите для свойства DisplayAlerts значение True, Excel больше не будет показывать предупреждающие сообщения даже после завершения макроса. Как вы понимаете, это может вызвать проблемы. Лучше всего установить для него значение False только на короткое время, когда вам нужно отключить предупреждения.

Даже если для DisplayAlerts установлено значение False, вы все равно будете видеть сообщения об ошибках, если они сгенерированы. Например, если вы выполните приведенный выше код и в книге есть только один лист, вы все равно увидите сообщение об ошибке. (Это происходит потому, что вы не можете удалить последний лист в книге.)

Понравилась статья? Поделить с друзьями:
  • Макросы excel vba синтаксис
  • Макрос удаления формул в excel
  • Макроса в excel для формул
  • Макрос удаление пробела excel
  • Макросы excel vba 2003