Проблемы с функцией - PullRequest
       0

Проблемы с функцией

0 голосов
/ 21 февраля 2020

Я пытаюсь заставить работать оповещение о том, что лист уже существует, однако я потерян. Функция не определена правильно или?

 Public Sub CopySheets()

    Do

        shName = InputBox("Please enter name of new project", "New Project")

        If shName <> "" Then

        shExists = SheetExists(shName) 'Check for existing sheet name
        If Not shExists Then
        Worksheets(Array(1, 2)).Copy After:=Sheets(Sheets.Count)


        Else

        MsgBox "Project Name:" & Space(1) & shName & " already exists", vbOKOnly + vbCritical, "Deter"
        End If
        End If
    Loop Until Not shExists Or shName = ""
End Sub

Private Function SheetExists(ByVal sheetName As String, _
        Optional ByVal wb As Workbook)

        If wb Is Nothing Then Set wb = ActiveWorkbook
        On Error Resume Next
        SheetExists = Not wb.Worksheets(sheetName) Is Nothing

End Function

1 Ответ

1 голос
/ 21 февраля 2020

Вы забыли добавить тип функции. Это должно быть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...