Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB6 | 22.08.05 |
Ersatz-Val-Funktion für die fehleranfällige VBA.Val-Funktion Die Val-Funktion von VB(A) arbeitet leider manchmal etwas eigenartig und liefert u.U. falsche Wert-Rückgaben. | ||
Autor: Dieter Otter | Bewertung: | Views: 18.142 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Haben Sie nicht auch schon einmal das Problem gehabt, dass die Val-Funktion von VB den Fehler "Type Mismatch" oder zu deutsch "Typen unverträglich" meldet? Oder haben Sie sich schon einmal darüber gewundert, dass die Val-Funktion bei der Umwandlung eines Strings, der sowohl Tausender-Trennzeichen als auch ein Dezimal-Trennzeichen enthält, ein falsches Ergebnis zurückliefert?
Hier zwei einfache Beispiele, bei denen die VB-eigene Val-Funktion nicht korrekt funktioniert:
MsgBox Val("1.234,56") ' Fehler: VBA.Val liefert hier den Wert 1,234 statt korrekterweise 1234,56
MsgBox Val("6,1%") ' Fehler: VBA.Val liefert den Wert 6 statt 6,1
Nachfolgend nun unsere neue Val-Funktion, die das Mango der VBA.Val-Funktion ausbügelt:
Public Function Val(ByVal sValue As String) As Double Dim sChar As String ' Dezimaltrennzeichen durch ! ersetzen sValue = Replace(sValue, GetDecimalChar(), "!") ' Tausendertrennzeichen ausfiltern sChar = GetThousandGroupDigit() If Len(sChar) > 0 Then sValue = Replace(sValue, sChar, "") End If ' evtl. nachstehende "Nicht-Ziffern"-Zeichen entfernen While InStr("0123456789!", Right$(sValue, 1)) = 0 And Len(sValue) > 0 sValue = Left$(sValue, Len(sValue) - 1) Wend ' ! durch . ersetzen, damit die VBA.Val-Funktion ' den korrekten Wert zurückliefert Val = VBA.Val(Replace(sValue, "!", ".")) End Function
Die neue Val-Funktion benötigt die beiden Funktionen zum Ermitteln des Dezimal-/Tausendertrennzeichens aus dem Tipp:
Dezimal- und Tausender-Trennzeichen einfach ermitteln