Laufzeitfehler 13 - Warum?

30/10/2009 - 10:33 von Hein | Report spam
Hallo,

folgenden Code habe ich aus verschiedenen Quellen angepasst:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rBereich As Range
Set rBereich = Range("c6:c1000")
If Not Intersect(Target, rBereich) Is Nothing Then
'On Error Resume Next
If Len(Target) > 4 Then Target.Value = Left(Target.Value, 4)
End If
End Sub

In den "überwachten" Zellen soll eine Eingabe auf vier Zeichen
zusammengestuzt werden, klappt soweit ganz gut.

Aber: Bei bestimmten Situationen erscheint eine Fehlermeldung:
Laufzeitfehler 13 Typen unvertràglich, beim debuggen ist folgendes
markiert: If Len(Target)>4 Then

Die Tabelle hat einen fixierten Bereich (Fenster fixieren), manchmal
leere Zellen. Beim Speichern, Öffnen und aktivieren einer Zelle im
fixierten, oberen Bereich erscheint die Fehlermeldung. Bei einer Mappe
ohne fixierten Bereich und immer ausgefüllten Zellen erscheint die
Fehlermeldung nicht.

Einfach mit On error resume next alles ignorieren hinterlàsst bei mir
mit meinen beschrànkten VBA Kenntnissen ein mulmiges Bauchgefühl.

vielen Dank und viele Grüße

Hein
 

Lesen sie die antworten

#1 Andreas Killer
30/10/2009 - 12:14 | Warnen spam
On 30 Okt., 10:33, Hein wrote:

Aber: Bei bestimmten Situationen erscheint eine Fehlermeldung:
Laufzeitfehler 13 Typen unvertràglich, beim debuggen ist folgendes
markiert: If Len(Target)>4 Then


Das Grundproblem ist das Target nicht nur aus einer Zelle, sondern
auch aus mehreren Zellen bestehen kann. Daher musst Du jede Zelle
einzeln prüfen.

Zusàtzlich sollte man IMHO prüfen ob die Zelle nicht ggf. eine Formel
oder einen Fehlerwert hat und in diesem Falle die Làngenbegrenzung
verhindern.

Andreas.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Range
For Each R In Target
If Not Intersect(R, Range("c6:c1000")) Is Nothing Then
If Not R.HasFormula And Not IsError(R) Then _
If Len(R) > 4 Then R = Left$(R, 4)
End If
Next
End Sub

Ähnliche fragen