aximand
Goto Top

Excel rundet trotz ausreichender NKS

Hallo zusammen,

ich zapfe eine Datenbank an und bekomme einen Wert Einkaufspreis 0,0758.

Obwohl die Zelle mit 5 NKS im Frontend formatiert ist wird dort 0,08 eingetragen. Den Wert aus der Datenbank habe ich in eine Variable gepackt und per MSGBOX anzeigen lassen: 0,0758 - passt

Aber mit der Übergabe an die Zelle passt der Wert dann nicht mehr:

Daten.Cells(izaehler, 7).Value = rst.Fields("EK").Value  

Hat jemand eine Idee was dieses Verhalten hervorruft, wie ich den Wert 0,0758 auch als Wert für die Zelle übergeben bekommen?


Herzlichen Dank!

Content-ID: 342508

Url: https://administrator.de/contentid/342508

Ausgedruckt am: 16.11.2024 um 03:11 Uhr

Meierjo
Meierjo 05.07.2017 um 08:37:07 Uhr
Goto Top
Hallo

Was passiert, wenn du
Daten.Cells(izaehler, 7).Value = Format(rst.Fields("EK").Value, "#,0000")  

benutzt??

Gruss
rentner63
rentner63 05.07.2017 um 09:19:05 Uhr
Goto Top
Hallo!

oder was passiert bei:
Daten.Cells(izaehler, 7).Value = CDbl(rst.Fields("EK").Value)  

Gruß Dieter
Aximand
Aximand 05.07.2017 um 09:20:30 Uhr
Goto Top
Dann bekomme ich 0,0000 ausgegeben face-smile
Aximand
Aximand 05.07.2017 um 09:29:31 Uhr
Goto Top
Nun ja, ich bekomm es nicht hin.

Als Krücke habe ich den Wert in eine Variable übergeben und dann die Variable als Wert für die Zelle vorgegeben. So geht es zumindest:

            test = rst.Fields("EK").Value  
            Daten.Cells(izaehler, 7).Value = test
Meierjo
Meierjo 05.07.2017 um 09:49:59 Uhr
Goto Top
Hallo

Dann bekomme ich 0,0000 ausgegeben face-smile

Steht denn der Wert auch mit Komma in der Datenbank, woher du die Daten ziehst?
Oder vielleicht mit Punkt??

Gruss
Aximand
Aximand 05.07.2017 um 09:53:57 Uhr
Goto Top
Der Feldtyp in der Datenbank ist money, wird also mit "," ausgegeben.
Kraemer
Lösung Kraemer 05.07.2017 um 10:31:10 Uhr
Goto Top
Zitat von @Aximand:

Der Feldtyp in der Datenbank ist money, wird also mit "," ausgegeben.
Das wird ein Ami anders sehen. Hast du das geprüft? Ich tippe nämlich auch auf dieses Problem.

Gruß
133417
Lösung 133417 05.07.2017 aktualisiert um 12:20:41 Uhr
Goto Top
Zitat von @Kraemer:
Zitat von @Aximand:
Der Feldtyp in der Datenbank ist money, wird also mit "," ausgegeben.
Das wird ein Ami anders sehen. Hast du das geprüft? Ich tippe nämlich auch auf dieses Problem.
Eben, in VBA muss man Dezimalzahlen im amerikanischen Format mit Punkt als Dezimaltrenner angeben. Deswegen den Wert vorher mit CDbl(wert) von einem String mit Komma in eine Dezimalzahl mit Punkt umwandeln und der Zelle zuweisen und Zellformat mit gewünschter Anzahl an Dezimalstellen richtig einstellen, dann klappt das auch wie gewünscht.

Beispiel:
Sub Test()
    With ActiveSheet
        ' richtig  
        .Range("A1").Value = CDbl("10,234")  
        ' falsch, wird im amerikanischen Format interpretiert und dort ist das Komma der Tausendertrenner  
        .Range("A2").Value = "10,234"  
    End With
End Sub
Ergebnis:

screenshot

Gruß
Aximand
Aximand 05.07.2017 um 16:00:00 Uhr
Goto Top
Danke ihr zwei face-smile
rentner63
rentner63 06.07.2017 um 08:55:00 Uhr
Goto Top
Hallo zusammen!

OK, verstehe ich jetzt irgendwie nicht so ganz, da meine obige Codezeile eigentlich das gleiche machen sollteface-sad?

Gruß Dieter
Aximand
Aximand 06.07.2017 um 09:26:33 Uhr
Goto Top
Der Teufel steckte hier im Detail. Das, was ich aus dem SQL-Server gezogen habe (Währungswert) ist nicht konform zum VBA-Double.
Deswegen wird der Wert aus dem SQL-Server mittles cdbl in einen Double-Datentyp konvertiert. Und damit ist dann auch das Problem gegessen ;)
rentner63
rentner63 06.07.2017 um 09:30:56 Uhr
Goto Top
OK, danke für Deine Antwort, aber der CDBL steht in meiner Codezeile doch auch drinnen, insofern?
Aximand
Aximand 06.07.2017 um 10:24:08 Uhr
Goto Top
Oh gar nicht gesehen, ich hatte nur das:
Daten.Cells(izaehler, 7).Value = Format(rst.Fields("EK").Value, "#,0000")

im Fokus, was sich beim Schreiben der Antwort wohl mit dem Posting CDBL überschnitten hat. Danach folgten weitere Kommis und nuja... so is das manchmal.

Also, das wäre dann wohl auch richtig!