Как определить существует или нет рабочий лист с определённым именем?

Вариант 1. (без 'генерации' ошибки)

code: #vba
Option Compare Text  'Если Вы не
понимаете, зачем используется эта инструкция, то оставьте её в покое
 
Private Function WorksheetIsExist(iName$) As Boolean
'***********************************************'
'   Дата создания 01/01/2005                    '
'   Автор Климов Павел Юрьевич                  '
'***********************************************'
    Dim iList As Worksheet
    For Each iList In Worksheets
        If iList.Name = iName$ Then
           WorksheetIsExist = True
           Exit Function
        End If
    Next
    WorksheetIsExist = False
End Function
code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
'***********************************************'
'   Дата создания 01/01/2005                    '
'   Автор Климов Павел Юрьевич                  '
'***********************************************'
    Dim iList As Worksheet
    For Each iList In Worksheets
        If StrComp(iList.Name, iName$, vbTextCompare) = 0 Then
           WorksheetIsExist = True
           Exit Function
        End If
    Next
    WorksheetIsExist = False
End Function

Вариант 2.

code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
'***********************************************'
'   Дата создания 01/01/2005                    '
'   Автор Климов Павел Юрьевич                  '
'***********************************************'
    On Error Resume Next
    WorksheetIsExist = IsObject(Worksheets(iName$))
End Function
code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
    On Error Resume Next
    WorksheetIsExist = (TypeOf Worksheets(iName$) Is Worksheet)
End Function
code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
    On Error Resume Next
    WorksheetIsExist = (TypeName(Worksheets(iName$)) = "Worksheet")
End Function
code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
    On Error Resume Next
    WorksheetIsExist = (VarType(Worksheets(iName$)) = vbObject)
End Function
code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
    On Error Resume Next
    WorksheetIsExist = Len(Worksheets(iName$).Name) > 0
End Function

Пример вызова любой из вышеопубликованных авторских функций:

code: #vba
Private Function WorksheetIsExist(iName$) As Boolean
    On Error Resume Next
    WorksheetIsExist = Worksheets(iName$).Index > 0
End Function
code: #vba
Private Sub Test()
    MsgBox WorksheetIsExist("Имя_Рабочего_Листа")
End Sub

Если необходимо активировать рабочий лист, то можно использовать такой вариант :

code: #vba
Private Sub Worksheet_Active()
On Error GoTo ErrHandler
    Worksheets("Отчёт").Activate
    Exit Sub
 
ErrHandler:
    MsgBox "Рабочий лист отсутствует", , "Ошибка пользователя !!!"
End Sub

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

Поделиться:

Похожие статьи: