Как определить существует или нет рабочий лист с определённым именем?
Категория: Basic
2012-07-09 15:19:24
Вариант 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.
Поделиться: