2016-10-23 2 views
1

Так что я просто хочу просмотреть мои листы и найти лист с определенным именем и удалить этот лист, если он найден, после чего я хочу создать лист после всех существующих листов с этим именем, мой код выглядит следующим образом:Удалить лист, если он существует, и создать новый

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" 

Однако это не работает, как я хочу, чтобы он, он не делает оба эти действия в один прогон кода, если лист уже существует он просто удалит лист и не сделает новый, как я этого хочу, мне нужно запустить его снова, чтобы создать новый, почему это и как я могу его исправить?

ответ

3

Извлеките инструкцию End, ваш код прекращается после обнаружения и удаления листа asdf.

5

вместо зацикливания через Worksheets коллекции вы можете проверить наличие элемента в ней, пытаясь и получить его

следующей функцию делает это:

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

и вы можете использовать его в вашем главном код следующим образом:

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" 

, но самый простой способ будет пытаться и удалить его, завернутые в 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" 
Смежные вопросы