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
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
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
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
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
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