wake-up-neo.com

Excel VBA, wenn Arbeitsblatt ("wsName") vorhanden ist

Ich frage mich, ob es eine Clean Cut-Funktion gibt, die True oder False zurückgibt, wenn ein Arbeitsblatt in einer Arbeitsmappe vorhanden ist.

Es wäre gut, aber nicht unbedingt erforderlich, wenn dies ohne Überspringen der Fehlerbehandlung möglich wäre.

Das einzige, was ich gefunden habe, funktioniert nicht wirklich:

On Error Resume Next
If (Worksheets("wsName").Name <> "") Then
    Debug.Print "Worksheet exists!"
Else
    Debug.Print "Worksheet doesn't exist!"
End If
On Error GoTo ErrHandler
36
Matt Rowles

Eine Version ohne Fehlerbehandlung:

Function sheetExists(sheetToFind As String) As Boolean
    sheetExists = False
    For Each sheet In Worksheets
        If sheetToFind = sheet.name Then
            sheetExists = True
            Exit Function
        End If
    Next sheet
End Function
77
Dante May Code

Dafür gibt es keine eingebaute Funktion.

Function SheetExists(SheetName As String, Optional wb As Excel.Workbook)
   Dim s As Excel.Worksheet
   If wb Is Nothing Then Set wb = ThisWorkbook
   On Error Resume Next
   Set s = wb.Sheets(SheetName)
   On Error GoTo 0
   SheetExists = Not s Is Nothing
End Function
29
Tim Williams

auch eine etwas andere version. Ich habe gerade eine Application.Sheets.Count durchgeführt, um zu wissen, wie viele Arbeitsblätter ich zusätzlich habe. naja und auch ein wenig umbenennen

Sub insertworksheet()
    Dim worksh As Integer
    Dim worksheetexists As Boolean
    worksh = Application.Sheets.Count
    worksheetexists = False
    For x = 1 To worksh
        If Worksheets(x).Name = "ENTERWROKSHEETNAME" Then
            worksheetexists = True
            'Debug.Print worksheetexists
            Exit For
        End If
    Next x
    If worksheetexists = False Then
        Debug.Print "transformed exists"
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = "ENTERNAMEUWANTTHENEWONE"
    End If
End Sub
8
jogrohs

Ein weiteres version der Funktion ohne Fehlerbehandlung. Dieses Mal ist es nicht case sensitive und ein bisschen effizienter.

Function WorksheetExists(wsName As String) As Boolean
    Dim ws As Worksheet
    Dim ret As Boolean        
    wsName = UCase(wsName)
    For Each ws In ThisWorkbook.Sheets
        If UCase(ws.Name) = wsName Then
            ret = True
            Exit For
        End If
    Next
    WorksheetExists = ret
End Function
6
Erik K.

Leicht geändert in David Murdochs Code für die generische Bibliothek

Function HasByName(cSheetName As String, _ 
                   Optional oWorkBook As Excel.Workbook) As Boolean

    HasByName = False
    Dim wb

    If oWorkBook Is Nothing Then
        Set oWorkBook = ThisWorkbook
    End If

    For Each wb In oWorkBook.Worksheets
        If wb.Name = cSheetName Then
            HasByName = True
            Exit Function
        End If
    Next wb
End Function
4
ShamBhagwat