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
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
Nicht ganz, ich versuche dieses '+$3%& Makro nur seit 2 Tagen zum Laufen zu bringen…
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?
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.
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