Как я могу определить, существует ли лист a в рабочей книге?

0

У меня есть следующий код, который не работает, как ожидалось:

If Sheets("a") <> "" Then MsgBox ("sheet a exists")

Как я могу определить, существует ли лист а в книге?

даН.м.
источник

Ответы:

2

Я бы сделал для него отдельную функцию:

Function SheetExists(SheetName As String)
    On Error GoTo no:
    WorksheetName = Worksheets(SheetName).Name
    SheetExists = True
    Exit Function
no:
    SheetExists = False
End Function

Тогда вы можете легко вызвать его там, где это необходимо, даже в формуле, если хотите:

Sub ABC()
    If SheetExists("Test") Then
        MsgBox "Yay!"
    Else
        MsgBox "Boo!"
    End If
End Sub

или же

=If(SheetExists("Test"),"Yay!","Boo")
Jonno
источник
Использование GoTo и меток в структурированном программировании считается дурным тоном, и обычно его можно избежать, если немного подумать.
Андрей П.
@AndrewP. Обработка ошибок VBA состоит из GoTo или Resume, оба они далеко не замечательны, но я всегда чувствовал, что имею больший контроль над GoTo, чем Resume, поскольку Resume может легко пройти незамеченным без условной проверки результата ошибки. Я всегда готов учиться, поэтому я с нетерпением жду вашего ответа о том, как правильно с этим справиться :)
Джонно
1

Вы можете проверить на ошибку. например:

Dim A As String
    On Error Resume Next
        A = Worksheets("a").Name
        Select Case Err.Number
            Case 9
                MsgBox "Sheet ""a"" does not exist"
            Case 0
                MsgBox "Sheet ""a"" exists"
            Case Else
                Stop
        End Select
    On Error GoTo 0
Рон Розенфельд
источник
1

Что-то вроде:

Sub DoesSheetExist()
    Dim s As Worksheet

    For Each s In Sheets
        If s.Name = "a" Then
            MsgBox "Sheet a exists"
            Exit Sub
        End If
    Next s
    MsgBox "Sheet a does not exist"
End Sub
Ученик Гэри
источник
Мне нравится описательное вспомогательное имя =)
Jonno
@ Джонно .................... это исправлено ................
Студент Гари
-1
If (Worksheets("a").Name <> "") Then MsgBox ("sheet A exists")

это работает как ожидалось

даН.м.
источник
2
Если он не существует, то он может выбросить индекс из-за ошибки диапазона?
Jonno