Vba: elimina il foglio se il nome contiene testo specifico


È possibile utilizzare la seguente sintassi in VBA per eliminare ogni foglio in una cartella di lavoro di Excel che contiene testo specifico:

 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

Quando esegui questa particolare macro, verrà visualizzata una casella di input in cui puoi inserire una stringa di testo specifica.

Dopo aver premuto Invio, ogni foglio nella cartella di lavoro di Excel contenente quel testo specifico verrà automaticamente eliminato.

Nota : la riga Application.DisplayAlerts=False indica a VBA di non visualizzare il processo di eliminazione dei fogli, il che ne accelera l’esecuzione.

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: utilizzare VBA per eliminare fogli contenenti testo specifico

Supponiamo di avere la seguente cartella di lavoro Excel contenente quattro fogli:

Ora supponiamo di voler eliminare ogni foglio che contiene “Squadra” nel nome del foglio.

Per fare ciò possiamo creare la seguente macro:

 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

Quando eseguiamo questa macro, appare una casella di input in cui possiamo inserire il testo che vogliamo cercare nei nomi dei fogli:

Dopo aver digitato “Squadra” e premuto OK , i nomi dei fogli che contengono “Squadra” in qualsiasi punto del nome verranno automaticamente eliminati:

Tieni presente che i due fogli con “Squadra” nel nome del foglio sono stati rimossi.

Tutti i fogli che non contenevano “Squadra” sono stati lasciati intatti.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in VBA:

VBA: come contare il numero di fogli in una cartella di lavoro
VBA: come estrarre i dati da un’altra cartella di lavoro
VBA: come inserire più righe

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *