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: як вставити кілька рядків

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *