Версия для печати

Как узнать существует ли лист в книге?

Что умеет Excel

 

Довольно часто при добавлении листов в книгу кодом необходимо удостовериться существует ли уже лист с таким именем или же нет. Т.к. если уже существует, то попытка создать лист с таким же именем неизбежно приведет к ошибке. Можно, конечно, поставить обработчик ошибки On Error.

Sub Add_New_Sheet()
    On Error Resume Next
    Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
End Sub
Sub Add_New_Sheet()
    On Error Resume Next
    Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
End Sub

Но тогда, если лист с таким именем уже существует, будет создан лист со следующим порядковым номером(типа Лист4). А этого в большинстве случаев не надо, т.к. обычно планируется все же либо создать лист с нужным именем, либо не создавать вовсе.
Я обычно проверяю так:

Sub Add_New_Sheet()
    Dim wsSh As Worksheet
    On Error Resume Next
    Set wsSh = Sheets("Новый лист")
    If wsSh Is Nothing Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
    'здесь можно либо активировать лист, либо производить еще какие действия
    'wsSh.Activate
End Sub
Sub Add_New_Sheet()
    Dim wsSh As Worksheet
    On Error Resume Next
    Set wsSh = Sheets("Новый лист")
    If wsSh Is Nothing Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
    'здесь можно либо активировать лист, либо производить еще какие действия
    'wsSh.Activate
End Sub

Если предполагается использовать такую проверку более одного раза в коде, то имеет смысл вынести проверку в отдельную функцию

Function Sh_Exist(sName As String) As Boolean
    Dim wsSh As Worksheet
    On Error Resume Next
    Set wsSh = Sheets(sName)
    Sh_Exist = Not wsSh Is Nothing
End Function
Function Sh_Exist(sName As String) As Boolean
    Dim wsSh As Worksheet
    On Error Resume Next
    Set wsSh = Sheets(sName)
    Sh_Exist = Not wsSh Is Nothing
End Function

Тогда достаточно будет одной строки кода, в которой будет меняться только имя листа:

Sub Add_New_Sheet()
    If Not Sh_Exist("Новый лист") Then
        Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
    End If
End Sub
Sub Add_New_Sheet()
    If Not Sh_Exist("Новый лист") Then
        Sheets.Add(, Sheets(Sheets.Count)).Name = "Новый лист"
    End If
End Sub

Также см.:
Как проверить открыта ли книга?



Поддержать автора сайта
Поделиться ссылкой
  1. Пока что нет комментариев.

Комментарий будет добавлен после проверки администратором.
Комментарии, не имеющие отношения к комментируемой статье, будут удаляться без уведомления и объяснения причин. Если есть вопрос по проблеме в Excel- добро пожаловаться на Форум