web-dev-qa-db-fra.com

Supprimer une feuille de calcul dans Excel à l'aide de VBA

J'ai une macros qui génère un certain nombre de classeurs. J'aimerais que les macros, au début de l'analyse, vérifient si le fichier contient 2 feuilles de calcul et les suppriment si elles existent.

Le code que j'ai essayé était:

If Sheet.Name = "ID Sheet" Then
    Application.DisplayAlerts = False
    Sheet.Delete
    Application.DisplayAlerts = True

End If

If Sheet.Name = "Summary" Then
    Application.DisplayAlerts = False
    Sheet.Delete
    Application.DisplayAlerts = True
End If

Ce code renvoie une erreur:

erreur d'exécution n ° 424, objet requis.

J'ai probablement le mauvais formatage, mais s'il existe un moyen plus simple de le faire, ce serait très utile.

16
Clauric

Considérer:

Sub SheetKiller()
    Dim s As Worksheet, t As String
    Dim i As Long, K As Long
    K = Sheets.Count

    For i = K To 1 Step -1
        t = Sheets(i).Name
        If t = "ID Sheet" Or t = "Summary" Then
            Application.DisplayAlerts = False
                Sheets(i).Delete
            Application.DisplayAlerts = True
        End If
    Next i
End Sub

NOTE:

Parce que nous sommes en train de supprimer, nous exécutons la boucle à l'envers.

34
Gary's Student

Essayez ce code:

For Each aSheet In Worksheets

    Select Case aSheet.Name

        Case "ID Sheet", "Summary"
            Application.DisplayAlerts = False
            aSheet.Delete
            Application.DisplayAlerts = True

    End Select

Next aSheet
9
R.Katnaan

Vous pouvez utiliser On Error Resume Next il n'est donc pas nécessaire de parcourir toutes les feuilles du classeur.

Avec On Error Resume Next les erreurs ne sont pas propagées mais sont supprimées. Donc, ici, lorsque les feuilles n'existent pas ou que, pour une raison quelconque, ne peuvent être supprimées, rien ne se passe. C'est comme si vous disiez: supprimez ces feuilles, et si cela échoue, cela ne me dérange pas. Excel est supposé trouver la feuille, vous ne ferez aucune recherche.

Remarque: lorsque le classeur contient uniquement ces deux feuilles, seule la première feuille sera supprimée.

Dim book
Dim sht as Worksheet

set book= Workbooks("SomeBook.xlsx")

On Error Resume Next

Application.DisplayAlerts=False 

Set sht = book.Worksheets("ID Sheet")
sht.Delete

Set sht = book.Worksheets("Summary")
sht.Delete

Application.DisplayAlerts=True 

On Error GoTo 0
5
dee
Worksheets("Sheet1").Delete
Worksheets("Sheet2").Delete
1
user7495253