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.
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.
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
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
Worksheets("Sheet1").Delete
Worksheets("Sheet2").Delete