Oft kommt man bei der Excel Makro Programmierung in die Situation zu Prüfen, ob ein bestimmtes Arbeitsblatt vorhanden ist. Hierfür gibt es meines Wissens zwei Vorgehensweisen.
- Die erste Möglichkeit ist, mit einer Schleife durch alle Arbeitsblätter einer Arbeitsmappe zu gehen, um zu prüfen, ob das gesuchte Sheet mit dabei ist.
- Die zweite Variante nimmt die Brechstange und versucht das gewünschte Blatt zu refernzieren. Tritt ein Fehler auf, ist das Blatt nicht vorhanden.
Ich persönlich bevorzuge die erste Variante, da ich gerne – soweit möglich – auf provozierte Fehler verzichte, daher zeige ich Euch hier auch nur meinen „Favoriten“.
Die Funktion erwartet als Parameter den Namen des gesuchten Arbeitsblattes. Sollte das gesuchte Arbeitsblatt nicht in der aktiven Arbeitsmappe liegen, kann man optional als zweiten Parameter ein Workbook-Objekt angeben, in der gesucht werden soll. Als Ergebnis wird ein Boolean-Wert (true/false) zurückgeliefert.
Function WorksheetExists(strWorksheet As String, Optional ByRef cWB As Workbook = Nothing) As Boolean Dim sh As Worksheet Dim flg As Boolean On Error GoTo Err_Handler If cWB Is Nothing Then Set cWB = ActiveWorkbook End If flg = False For Each sh In cWB.Worksheets If sh.Name = strWorksheet Then flg = True Exit For End If Next WorksheetExists = flg Exit Function Err_Handler: WorksheetExists = False End Function
Wo ist das Problem mit der Brechstange in diesem Fall?
1.) sie benötigt nur zwei Zeilen Quelltext und ist somit verständlicher.
2.) bei vielen Arbeitsblättern dürfte sie auch schneller sein (sofern hinter Sheets eine Collection steckt und man mit einem Schlüssel anstatt Index arbeitet)
Natürlich vermeide ich es ebenfalls, sinnlos Fehler zu provozieren – aber letztenlich ist immer die Lösung am Besten, welche am praxistauglichen ist. ;)