Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

IsDate/IsNumeric - Problem

IsDate/IsNumeric - Problem
28.10.2005 12:05:55
Markus Hötschl
Hallo,
ich versuche Daten aus einem Excel-Arbeitsblatt in eine SQL-Server-Datenbank zu schreiben. Dabei tritt folgendes Problem auf:
Um Datums- und Zahlenwerte in mein SQL-Statement einbetten zu könne muss ich diese getrennt behandeln. Benutze ich aber die Funktionen IsDate/IsNumeric für diese Unterscheidung, so kann es vorkommen (konkreter Fall: 159,09 als Währung formatiert) dass beide Funktionen True zurückgeben und damit das SQL-Statement ungültig wird! Wie könnte man diese Problem lösen, also eine eindeutige Unterscheidung zwischen Datum und "anderen" Zahlen bewerkstelligen?
Vielen Dank für alle Antworten
MfG
Markus

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IsDate/IsNumeric - Problem
28.10.2005 13:02:35
Erich G.
Hallo Markus,
diese Unterscheidung lässt sich nicht anhand des Zellinhalts treffen. Im folgenden Beispiel stehen in A1 und A2 nur zwei verschiedene Darstellungen der Zahl 38500,50. Es muss sich aus dem Zusammenhang (z. B. in welcher Spalte der Wert steht) oder dem Zahlformat ergeben, ob die du Zahl als Zahl oder als Datum an den SQL-Server schicken willst.
AW: IsDate/IsNumeric - Problem
28.10.2005 14:31:23
Luschi
Hallo Markus,
ich mach das so:

Dim xWert As Variant
xWert = ActiveSheet.Range("C4")
Select Case VarType(xWert)
Case vbDate
MsgBox "Das ist ein Datumswert"
Case vbDouble
MsgBox "Das ist ein Zahlenwert"
Case vbinterger
'komisch, aber dieser Fall tritt nie ein, da jede Zahl _
im Worksheet als vbDouble erkannt wird
End Select
Gruß von Luschi
aus klein-Paris
Anzeige
AW: IsDate/IsNumeric - Problem
28.10.2005 16:39:23
Herbert
Hi,
vielleicht weil es vbinterger nicht gibt?
mfg Herber
AW: IsDate/IsNumeric - Problem
29.10.2005 00:09:05
Erich G.
Hallo Herbert,
nein, an Luschis kleinem Schreibfehler liegt es nicht.
Unabhängig davon, ob da nun "Case vbinterger" oder richtig "Case vbInteger" steht - "Case vbDouble" trifft zu.
Das ist unabhängig von der Reihenfolge der Case-Anweisungen. Wenn in C4 die Zahl 1 steht, zeigt die MsgBox den Wert 5 (vbDouble) an:

Dim xWert ' as Variant
xWert = ActiveSheet.Range("C4")
MsgBox VarType(xWert)

Frage:
Gibt es überhaupt eine Konstellation, bei der "MsgBox VarType(xWert)" den Wert 2 (vbInteger) ausgibt?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: IsDate/IsNumeric - Problem
30.10.2005 17:54:47
schauan
Hallo Markus,
entwedr nimmst Du für beide Formate getrennte Zellen oder Du kannst es anhand der Werte unterscheiden, wenn es z.B. nur um kleinere Euro-Beträge geht die von der Zahl unter einem definierten Startdatum liegen - wenn es heute ist müsste der Betrag kleiner 38655 Euro sein, was größer ist ist dann ein Datum.
AW: IsDate/IsNumeric - Problem
30.10.2005 18:38:11
Erich G.
Hallo Excellente,
im Zusammenhang mit Luschis Vorschlag tauchte folgende Frage auf:
Bei welchem Wert in A1 hat VarType(xWert) den Wert 2 (vbInteger) ?
Beipielmakro:

Sub tst()
Dim xWert ' as Variant
xWert = Cells(1, 1)
MsgBox VarType(xWert)
End Sub

Ich finde keine Konstellation, bei der "MsgBox VarType(xWert)" eine 2 ausgibt.
Gleiches gilt für vbByte, vbLong, vbSingle - statt dieser Werte liefert VarTape immer den Wert 5 = vbDouble.
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: IsDate/IsNumeric - Problem
02.11.2005 13:53:53
Markus Hötschl
Hallo,
benutze Luschi´s Lösung, funktioniert sehr gut!
Danke nochmal!
MfG
Markus
AW: IsDate/IsNumeric - Problem
31.10.2005 10:09:35
MichaV
Hallo,
ich wandle immer die Typen hin und her und prüfe, ob sich dabei Veränderungen ergeben:


Option Explicit
Sub tst()
    Dim xWert  ' as Variant
    Cells(1, 1) = "150,09"
    xWert = Cells(1, 1)
    Debug.Print xWert & " ist " & IIf(istZahl(xWert), "eine Zahl", " keine Zahl")
    Debug.Print IsNumeric(xWert), IsDate(xWert)
    Cells(1, 1) = "12.9.2005"
    xWert = Cells(1, 1)
    Debug.Print xWert & " ist " & IIf(istZahl(xWert), "eine Zahl", " keine Zahl")
    Debug.Print IsNumeric(xWert), IsDate(xWert)
End Sub
Function istZahl(Wert As VariantAs Boolean
If Not IsNumeric(Wert) Then Exit Function
If Not (CStr(CDate(Wert)) = CStr(Wert)) And CStr(CSng(Wert)) = CStr(Wert) Then
  istZahl = True
End If
End Function


     Code eingefügt mit Syntaxhighlighter 4.0

Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: IsDate/IsNumeric - Problem
31.10.2005 11:20:23
schauan
Hallo Micha,
teste es mal so wie man die Daten eingibt und Dein Test läuft schief:


Sub tst()
    Dim xWert  ' as Variant
    Cells(1, 1) = "38655"
    xWert = Cells(1, 1)
    Debug.Print xWert & " ist " & IIf(istZahl(xWert), "eine Zahl", " keine Zahl")
    Debug.Print IsNumeric(xWert), IsDate(xWert)
    Cells(1, 1) = "12-9-5"
    xWert = Cells(1, 1)
    Debug.Print xWert & " ist " & IIf(istZahl(xWert), "eine Zahl", " keine Zahl")
    Debug.Print IsNumeric(xWert), IsDate(xWert)
End Sub

     Code eingefügt mit Syntaxhighlighter 4.0

Anzeige
AW: IsDate/IsNumeric - Problem
31.10.2005 12:53:30
MichaV
Hallo,
wieso? Kapier ich nicht.
38655 ist eine Zahl
09.12.2005 ist keine Zahl
Gruß- Micha
PS: Rückmeldung wäre nett.
AW: IsDate/IsNumeric - Problem
31.10.2005 18:14:20
schauan
Hallo Micha,
lasse meinen code 2x durchlaufen und aus der 38655 wird der 30.10.2005 :-( im Direktfenster ausgegeben und als "keine Zahl" bewertet.
- Zellformat Standard
Grüße, Andre
habs kapiert, danke ;o)
01.11.2005 09:28:28
MichaV

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige