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: как вставить несколько строк