Вы забыли добавить тип функции. Это должно быть boolean
Private Function
SheetExists(ByVal sheetName As String, _
Optional ByVal wb As Workbook) As Boolean
If wb Is Nothing Then Set wb = ActiveWorkbook
On Error Resume Next
SheetExists = Not wb.Worksheets(sheetName) Is Nothing
End Function
Проблема с вашим кодом состоит в том, что в случае, если лист не существует, строка SheetExists = Not wb.Worksheets(sheetName) Is Nothing
вызовет ошибку и SheetExists
сохранит значение по умолчанию, которое является пустым в качестве типа данных по умолчанию для функции без определения типа данных используется variant
. Если вы определили тип данных как boolean
, значением по умолчанию будет False
.
ИМХО, этот код яснее, хотя и длиннее
Private Function SheetExists(ByVal sheetName As String, _
Optional ByVal wb As Workbook) As Boolean
Dim ws As Worksheet
If wb Is Nothing Then Set wb = ActiveWorkbook
On Error GoTo EH
Set ws = wb.Worksheets(sheetName)
SheetExists = True
Exit Function
EH:
SheetExists = False
End Function