Как проверить, существуют ли определенные листы в Excel-VBA?

Кто-нибудь знает, как проверить, существуют ли определенные листы в документе Excel с помощью Excel VBA?

Ответ 1

Хотя (к сожалению) такой метод недоступен, мы можем создать свою собственную функцию, чтобы проверить это.

Надеемся, что приведенный ниже код соответствует вашим потребностям.

Edit1: Добавлена ​​также инструкция delete...

Sub test()

    If CheckSheet(Sheets(3).Name) then

        Application.DisplayAlerts = False
        Sheets(Sheets(3).Name).Delete
        Application.DisplayAlerts = True

    End If

End Sub

Решение, для которого я хотел бы...

Function CheckSheet(ByVal sSheetName As String) As Boolean

    Dim oSheet As Excel.Worksheet
    Dim bReturn As Boolean

    For Each oSheet In ActiveWorkbook.Sheets

        If oSheet.Name = sSheetName Then

            bReturn = True
            Exit For

        End If

    Next oSheet

    CheckSheet = bReturn

End Function

В качестве альтернативы, если вы не возражаете использовать код, который активно поднимает ошибки (что не рекомендуется с использованием общих правил кодирования), вы можете использовать этот Spartan Программирование wannabe 'code ниже...

Function CheckSheet(ByVal sSheetName As String) As Boolean

    Dim oSheet As Excel.Worksheet
    Dim bReturn As Boolean

    For Each oSheet In ActiveWorkbook.Sheets

        If oSheet.Name = sSheetName Then

            bReturn = True
            Exit For

        End If

    Next oSheet

    CheckSheet = bReturn

End Function


Function CheckSheet(ByVal sSheetName As String) As Boolean

    On Error Resume Next
    Dim oSheet As Excel.Worksheet

    Set oSheet = ActiveWorkbook.Sheets(sSheetName)
    CheckSheet = IIf(oSheet Is Nothing, False, True)

End Function

Ответ 2

Что-то вроде этого позволит вам начать:

On Error Resume Next

Dim wSheet as Worksheet
Set wSheet = Sheets(1) ' can also be a string, such as Sheets("Sheet1")

If wSheet Is Nothing Then
    MsgBox "Worksheet not found!"
    Set wSheet = Nothing ' make the worksheet point to nothing. 
    On Error GoTo 0 
Else 
    MsgBox "Worksheet found!"
    Set wSheet = Nothing ' set the found Worksheet object to nothing.  You can use the found wSheet for your purposes, though.  
End If

Этот код был основан на http://www.ozgrid.com/VBA/IsWorkbookOpen.htm. Найдите подменю DoSheetExist().

Надеюсь, это поможет!

Ответ 3

Я адаптировал этот код для использования в LotusScript, одном из языков, используемых IBM Notes (ранее Lotus Notes), как показано ниже.

Public Function ExcelSheetExists( _
    xlBook As Variant, _ ' Excel workbook object
    ByVal strSheetName As String _
    ) As Boolean

    On Error GoTo errHandler

    ForAll xlSheet In xlBook.Sheets
        If xlSheet.Name = strSheetName Then
            ExcelSheetExists = True
            Exit Forall
        End If
    End ForAll

    GoTo Done

errHandler:
    ' Call MyCustomErrorHandler()
    Resume Done
Done:

End Function

Ответ 4

On Error GoTo Line1
If Sheets("BOX2").Index > 0 Then
Else
Line1: MsgBox ("BOX2 is missing")
end if 

Я сделал это так:)