Hallo Froderik,
dieser Fehler tritt immer dann auf, wenn unterschiedliche Datentypen kombiniert werden, die mit der relevanten Funktion nicht kobinierbar sind.
Du hast z.B. quersumme als Variant definiert, obwohl es sich um eine aufgerufene Funktion handelt. Lass "quersumme as Variant," weg. Die anderen Differenzen der Deklarierung zwischen Sub und Function (Long und Single) sollten die Funktion nicht behindern.
Ferner glaube ich, dass es
produkt = (Mid(Nummer, Ziffer, 1) Mod 10) * A(Ziffer - 1)
heißen muss, da das Array bei null zu zählen anfängt. Das habe ich aber nicht genau geprüft.
Gruß
Holger
Froderik schrieb am 04.03.2009 20:13:50:
Schönen, guten Abend!
ich habe das Problem, das ich in meinem VB-Programm diese Fehlermeldung "Laufzeitfehler '13': Typen unverträglich" erhalte und nicht weiß woher sie kommt. Der Fehler ist ja relativ häufig und mir kommt es so vor, dass es immer irgendwie andere Gründe gibt.
Ich hoffe, jemand findet den Grund und kann mir helfen!
Public Sub cmdStart_Click()
Dim Nummer As String, VNummer As String, Pruefz As Integer, Summe As Single
Dim quersumme As Variant, Ziffer As Single, n As Single, Summand As Single
Dim A As Variant, Produkt As Single, Spezial As Single
Dim EndSumme As Single, zahl As Variant
VNummer = Cells(2, 3).Value
Nummer = Mid(VNummer, 1, 7)
Debug.Print Nummer
n = Len(Nummer)
Summand = 8
A = Array(128, 64, 32, 16, 8, 4, 2)
For Ziffer = 1 To n
Summand = Summand - 1
Summe = Mid(Nummer, Ziffer, 1) + Summand
Produkt = (Mid(Nummer, Ziffer, 1) Mod 10) * A(Ziffer)
Spezial = quersumme(quersumme(Produkt))
EndSumme = EndSumme + Spezial
Next
Pruefz = 10 - (EndSumme Mod 10)
Select Case (Pruefz)
Case 0
Cells(3, 3).Value = "keine Beantstandung"
Case 1
Cells(3, 3).Value = "Prüfziffer enthält ungültige Zeichen"
Case 2
Cells(3, 3).Value = "Prüfziffer muss achtstellig sein"
Case 3
Cells(3, 3).Value = "Prüfziffer ist falsch"
End Select
End Sub
_________________________________________________________
Function quersumme(ByVal zahl As Long) As Long
If zahl < 0 Then Exit Function
quersumme = 0
Do
quersumme = quersumme + zahl Mod 10
zahl = zahl 10
Loop Until zahl = 0
End Function
Danke und Gruß,
Froderik
|