VBA: Fehlerbehandlung in einem Excel-Makro wird ig

Guten Tag,

ich werde seit 2 Tagen Wahnsinnig.

In einer Excel Funktion habe ich die Fehlerbehandlung eingeschaltet und bekomme trotzdem immer den Fehler „9“ wenn ich auf ein nicht existierendes Tabellenblatt prüfe…

Was mache ich falsch?
Hier der Code:

Public Function BlattVorhanden(NameBlatt As String) As Boolean
 Dim tester As Long
 BlattVorhanden = False
 On Error Resume Next
 tester = ThisWorkbook.Worksheets(NameBlatt).Index
 If Err.Number = 0 Then BlattVorhanden = True
 On Error GoTo 0
End Function

Vielen Dank für Eure Hilfe.

Gruß
Marc

hallo Marc,

ich werde seit 2 Tagen Wahnsinnig.

aha, du hast Excel seit 2 Tagen :smile:)

In einer Excel Funktion habe ich die Fehlerbehandlung
eingeschaltet und bekomme trotzdem immer den Fehler „9“ wenn
ich auf ein nicht existierendes Tabellenblatt prüfe…

K.A., selbst wenn ich im Editor bei Optionen anderes auswähle bei „Unterbrechen bei Fehlern“ läuft dein Code, also Rückgabewert ist False bei nicht existierenden Blättern und True bei existierenden.
Getestet mit XL2000.

Sub tt()
MsgBox BlattVorhanden(„Tabelle1“)
MsgBox BlattVorhanden(„Nichtda“)
End Sub

Public Function BlattVorhanden(NameBlatt As String) As Boolean
Dim tester As Long
BlattVorhanden = False
On Error Resume Next
tester = ThisWorkbook.Worksheets(NameBlatt).Index
If Err.Number = 0 Then BlattVorhanden = True
On Error GoTo 0
End Function

Gruß
Reinhard

ich werde seit 2 Tagen Wahnsinnig.

aha, du hast Excel seit 2 Tagen :smile:)

Nicht ganz, ich versuche dieses '+$3%& Makro nur seit 2 Tagen zum Laufen zu bringen… :wink:

K.A., selbst wenn ich im Editor bei Optionen anderes auswähle
bei „Unterbrechen bei Fehlern“ läuft dein Code, also
Rückgabewert ist False bei nicht existierenden Blättern und
True bei existierenden.
Getestet mit XL2000.

AHA! Dann scheint es ein Bug in Excel2007 zu sein… Da bin ich es nämlich am bearbeiten…

Vielen Dank für Deine Aufmerksamkeit, ich muss wohl noch weitersuchen.
HAst Du vielleicht eine Idee wie man es anders machen könnte?

Gruß
Marc

Getestet mit XL2000.

AHA! Dann scheint es ein Bug in Excel2007 zu sein… Da bin
ich es nämlich am bearbeiten…

Hallo Marc,

jetzt hau mich nicht weil ich der Überbringer übler Botschaften bin.

Ich hab zwar keine Ahnung von 2007, aber seit paar Wochen habe ich auch die 2007 Home und Student Version.
Damit lief eben der Code den ich dir schrieb problemlos.

Gruß
Reinhard

Hallo Marc.

Was mache ich falsch?
Hier der Code:

Public Function BlattVorhanden(NameBlatt As String) As Boolean
Dim tester As Long
BlattVorhanden = False
On Error Resume Next
tester = ThisWorkbook.Worksheets(NameBlatt).Index
If Err.Number = 0 Then BlattVorhanden = True
On Error GoTo 0
End Function

Ich bin der Überzeugung, dass der grundsätzliche Aufbau Deiner Fehlerbehandlung falsch ist. Versuch es bitte 'mal mit dem folgenden Aufbau:

Public Function BlattVorhanden(NameBlatt As String) As Boolean

 Dim tester As Long

 On Error Goto ErrHandler

 'Code

Ende:

 Exit Function

ErrHandler:

 'Code
 Resume Ende

End Function

Außerdem könnte es sein, daß bei einem Fehler der an die Funktion übergebene Wert „NameBlatt“ geändert zurückgeschrieben wird. Möglicherweise ist es hilfreich, wenn Du den Parameter „NameBlatt“ nicht als Referenz, sondern als Wert übergibst:

Public Function BlattVorhanden(ByVal NameBlatt As String) As Boolean

VG
Carsten

Grüezi Marc

AHA! Dann scheint es ein Bug in Excel2007 zu sein… Da bin
ich es nämlich am bearbeiten…

Mitnichten - der Code läuft auch da problemlos.

Vielen Dank für Deine Aufmerksamkeit, ich muss wohl noch
weitersuchen.

Wenn genau tritt denn der Fehler auf?
Wie hast Du das gemerkt?

HAst Du vielleicht eine Idee wie man es anders machen könnte?

Etwas kürzer noch geht es folgender massen:

Public Function SheetExists(strName As String) As Boolean
 On Error Resume Next
 SheetExists = Not Sheets(strName) Is Nothing
End Function

Und sonst durchlaufe ohne Fehlerbehandlung alle Tabellenblätter der Mappe in einer Schleife und prüfe ob der Name bereits enthalten ist.

BTW:
Auch ein Diagramm-Blatt könnte den Namen schon tragen, daher reicht es IMO nicht, nur die Worksheets zu prüfen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -