Vba: удалить лист, если имя содержит определенный текст


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

 SubDeleteSheets ()

    Dim TextToFind As String
    Dim TextWildcard As String
    Dim Ws As Worksheet
    Dim i As Integer
    
    'prompt user for text to search for in sheet names
    TextToFind = Application.InputBox(" Delete Sheets That Contain: ", _
                                    ThisWorkbook.ActiveSheet.Name, , , , , 2)
                                    
    TextWildcard = " * " & TextToFind & " * "
    Application.DisplayAlerts = False
    
    'loop through sheets and delete each sheet that contains text
    i = 0
    For Each Ws In ThisWorkbook.Sheets
        If Ws.Name Like TextWildcard Then
            Ws.Delete
            i = i + 1
        End If
    Next Ws
    
    Application.DisplayAlerts = True
    
End Sub

Когда вы запустите этот конкретный макрос, появится поле ввода, в котором вы можете ввести определенную текстовую строку.

Как только вы нажмете Enter, каждый лист книги Excel, содержащий этот конкретный текст, будет автоматически удален.

Примечание . Строка Application.DisplayAlerts=False сообщает VBA не отображать процесс удаления листов, что ускоряет его выполнение.

В следующем примере показано, как использовать этот синтаксис на практике.

Пример. Используйте VBA для удаления листов, содержащих определенный текст.

Предположим, у нас есть следующая книга Excel, содержащая четыре листа:

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

Для этого мы можем создать следующий макрос:

 SubDeleteSheets ()

    Dim TextToFind As String
    Dim TextWildcard As String
    Dim Ws As Worksheet
    Dim i As Integer
    
    'prompt user for text to search for in sheet names
    TextToFind = Application.InputBox(" Delete Sheets That Contain: ", _
                                    ThisWorkbook.ActiveSheet.Name, , , , , 2)
                                    
    TextWildcard = " * " & TextToFind & " * "
    Application.DisplayAlerts = False
    
    'loop through sheets and delete each sheet that contains text
    i = 0
    For Each Ws In ThisWorkbook.Sheets
        If Ws.Name Like TextWildcard Then
            Ws.Delete
            i = i + 1
        End If
    Next Ws
    
    Application.DisplayAlerts = True
    
End Sub

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

Как только мы введем «Команда» и нажмем «ОК» , имена листов, содержащие слово «Команда» в любом месте имени, будут автоматически удалены:

Обратите внимание, что два листа со словом «Команда» в названии были удалены.

Все листы, на которых не было слова «Команда», остались нетронутыми.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в VBA:

VBA: как посчитать количество листов в книге
VBA: как извлечь данные из другой книги
VBA: как вставить несколько строк

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *