2016-10-23 2 views
1

Also ich möchte einfach durch meine Arbeitsblätter und ein Blatt mit einem bestimmten Namen suchen und löschen Sie das Blatt, wenn es gefunden wird, danach möchte ich ein Blatt nach allen vorhandenen Blättern erstellen mit diesem Namen, ist mein Code wie folgt:Lösche Blatt, wenn es existiert und ein neues erstellt

For Each ws In Worksheets 
    If ws.Name = "asdf" Then 
     Application.DisplayAlerts = False 
     Sheets("asdf").Delete 
     Application.DisplayAlerts = True 
     End 
    End If 
Next 

Sheets.Add(After:=Sheets(Sheets.count)).Name = "asdf" 

Allerdings funktioniert dies nicht, wie ich es haben will, ist es nicht in einem Durchlauf des Codes beide dieser Aktionen ausführen, wenn bereits das Blatt existiert es wird einfach das Blatt löschen und nicht ein neues erstellen, wie ich es möchte, ich muss es erneut ausführen, damit es ein neues erstellt, warum ist das und wie würde ich darüber gehen, es zu reparieren?

Antwort

3

Entfernen Sie die End-Anweisung, Ihr Code wird beendet, nachdem das Arbeitsblatt asdf gefunden und gelöscht wurde.

5

statt durch Worksheets Sammlung von looping Sie die Existenz eines Elements in ihm durch den Versuch testen und es

die folgende Funktion bekommen tut es:

Function GetWorksheet(shtName As String) As Worksheet 
    On Error Resume Next 
    Set GetWorksheet = Worksheets(shtName) 
End Function 

und Sie können es in Ihrem Haupt ausbeuten Code wie folgt:

If Not GetWorksheet("asdf") Is Nothing Then 
    Application.DisplayAlerts = False 
    Worksheets("asdf").Delete 
    Application.DisplayAlerts = True 
End If 
Worksheets.Add(After:=sheets(sheets.Count)).name = "asdf" 

aber die einfachste Art und Weise versuchen würde, und löschen sie es eingewickelt in einem On Error Resume Next - On Error GoTo 0 "Block":

Application.DisplayAlerts = False 
    On Error Resume Next 
    Worksheets("asdf").Delete 
    On Error GoTo 0 
    Application.DisplayAlerts = True 
    Worksheets.Add(After:=sheets(sheets.Count)).name = "asdf" 
Verwandte Themen