Если ошибка оператора при создании нового рабочего листа - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь узнать, существует ли лист, и если это так, поместите новый лист после указанного листа в операторе if.

Проблема в том, что он успешно создает мой новый лист, но затем он попытается для создания дополнительных листов IE: Sheet5,6,7 ET C. Ошибка говорит, что лист уже существует. Как будто он все еще пытается запустить код после создания нового.

    
    For Each ws In mybook.Worksheets
        
        If ws.Name = ("Sheet1") Then
        mybook.Sheets.Add(After:=Sheets("Sheet1")).Name = "My New Sheet"

        
        ElseIf ws.Name = ("Sheet2") Then
        mybook.Sheets.Add(After:=Sheets("Sheet2")).Name = "My New Sheet"
        
        
        ElseIf ws.Name = ("Sheet3") Then
        mybook.Sheets.Add(After:=Sheets("Sheet3")).Name = "My New Sheet"
        
        
        ElseIf ws.Name = ("Sheet4") Then
        mybook.Sheets.Add(After:=Sheets("Sheet4")).Name = "My New Sheet"
        
        End If
    Next ws

 End Sub

1 Ответ

1 голос
/ 07 августа 2020

Может быть, это то, что вы хотите:

For Each ws In mybook.Worksheets
    If ws.Name = ("Sheet1") Or ws.Name = ("Sheet2") Or _
       ws.Name = ("Sheet3") Or ws.Name = ("Sheet4") Then

        mybook.Sheets.Add(After:=ws).Name = "My New Sheet"
        Exit For '<< done checking so exit the loop
  
    End If
Next ws

или это, если вы хотите искать листы в определенном c порядке:

Dim ws As Worksheet, arrSheets, s

arrSheets = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")

For Each s In arrSheets
    
    On Error Resume Next
    Set ws = mybook.Worksheets(s)
    On Error GoTo 0
    
    If Not ws Is Nothing Then
        mybook.Sheets.Add(After:=ws).Name = "My New Sheet"
        Exit For '<< done checking so exit the loop
    End If

Next s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...