Vba: usuń arkusz, jeśli nazwa zawiera określony tekst


Aby usunąć każdy arkusz skoroszytu programu Excel zawierający określony tekst, możesz użyć następującej składni w języku VBA:

 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

Po uruchomieniu tego konkretnego makra pojawi się pole wprowadzania, w którym możesz wprowadzić określony ciąg tekstowy.

Po naciśnięciu klawisza Enter każdy arkusz skoroszytu programu Excel zawierający ten konkretny tekst zostanie automatycznie usunięty.

Uwaga : Linia Application.DisplayAlerts=False informuje VBA, aby nie wyświetlał procesu usuwania arkuszy, co przyspiesza jego wykonanie.

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: Użyj VBA, aby usunąć arkusze zawierające określony tekst

Załóżmy, że mamy następujący skoroszyt programu Excel zawierający cztery arkusze:

Załóżmy teraz, że chcemy usunąć każdy arkusz zawierający w nazwie „Zespół”.

W tym celu możemy utworzyć następujące makro:

 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

Po uruchomieniu tego makra pojawia się pole wprowadzania, w którym możemy wpisać w nazwach arkuszy tekst, który chcemy wyszukać:

Gdy wpiszemy „Zespół” i naciśniemy OK , nazwy arkuszy zawierające słowo „Zespół” w dowolnym miejscu w nazwie zostaną automatycznie usunięte:

Należy pamiętać, że dwa arkusze zawierające w nazwie „Zespół” zostały usunięte.

Wszelkie arkusze niezawierające słowa „Zespół” pozostały nietknięte.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w VBA:

VBA: Jak policzyć liczbę arkuszy w skoroszycie
VBA: Jak wyodrębnić dane z innego skoroszytu
VBA: jak wstawić wiele linii

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *