vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB6, VBA01.07.17
Ersatzfunktion für die VBA.IsNumeric Funktion

Die VB-Eigene IsNumeric Funktion wertet automatisch ein "E" im übergebenen Ausdruck als Exponenzialschreibweise aus, was u.U. zu Verwirrungen führen kann!

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  2.816 
http://www.tools4vb.de/System:  Win7, Win8, Win10, Win11 Beispielprojekt 

Die VB-Eigene IsNumeric Funktion wertet automatisch ein "E" im übergebenen Ausdruck als Exponenzialschreibweise aus, was u.U. zu Verwirrungen führen kann!

Will man bspw. einen Text (String) prüfen, ob dieser numerisch ist, verwendet man i.a.R. die IsNumeric Funktion von VB:

Dim MyText As String
MyText = "4B7"
If IsNumeric(MyText) Then
 ...

Obiges Beispiel ergibt den Wert False, d.h. der übergebene Ausdruck "4B7" wurde als "nicht numerisch" ausgewertet.

Noch ein Beispiel:

MyText = "4E7"
If IsNumeric(MyText) Then
 ...

Jetzt wird auf einmal der Wert True zurückgeliefert, d.h. der übergebene Ausdruck "4E7" wird als "numerisch" ausgewertet.
Hintergrund ist das enthaltene "E". Dieses Zeichen wird automatisch als Exponenzialschreibweise erkannt, was jedoch in vielen Fällen zu Verwirrungen sorgen kann!

Daher habe ich eine kleine Ersatz-Funktion erstellt, die im übergebenen Ausdruck das "E" als Buchstabe und nicht als "Zahl" auswertet, sofern es sich bei dem Ausdruck um einen String-Datentyp handelt:

' Ersatzfunktion für VBA.IsNumeric,
' da die IsNumeric von VB ein "E" als Exponenzialschreibweise auswertet, bspw. 4E7 = IsNumeric True ?!?!
Public Function IsNumeric(ByVal Value As Variant) As Boolean
  If Not IsNull(Value) Then
    If varType(Value) = vbString Then
      IsNumeric = VBA.IsNumeric(Replace(CStr(Value), "E", "A"))
    Else
      IsNumeric = VBA.IsNumeric(Value)
    End If
  End If
End Function

Ab sofort liefert folgende Abfrage den (gewünschten) Rückgabewert False:

MyText = "4E7"
If IsNumeric(MyText) Then
 ...