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-Key: 342508

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: Meierjo
Meierjo Jul 05, 2017 at 06:37:07 (UTC)
Goto Top
Hallo

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

benutzt??

Gruss
Member: rentner63
rentner63 Jul 05, 2017 at 07:19:05 (UTC)
Goto Top
Hallo!

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

Gruß Dieter
Member: Aximand
Aximand Jul 05, 2017 at 07:20:30 (UTC)
Goto Top
Dann bekomme ich 0,0000 ausgegeben face-smile
Member: Aximand
Aximand Jul 05, 2017 at 07:29:31 (UTC)
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
Member: Meierjo
Meierjo Jul 05, 2017 at 07:49:59 (UTC)
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
Member: Aximand
Aximand Jul 05, 2017 at 07:53:57 (UTC)
Goto Top
Der Feldtyp in der Datenbank ist money, wird also mit "," ausgegeben.
Member: Kraemer
Solution Kraemer Jul 05, 2017 at 08:31:10 (UTC)
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ß
Mitglied: 133417
Solution 133417 Jul 05, 2017 updated at 10:20:41 (UTC)
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ß
Member: Aximand
Aximand Jul 05, 2017 at 14:00:00 (UTC)
Goto Top
Danke ihr zwei face-smile
Member: rentner63
rentner63 Jul 06, 2017 at 06:55:00 (UTC)
Goto Top
Hallo zusammen!

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

Gruß Dieter
Member: Aximand
Aximand Jul 06, 2017 at 07:26:33 (UTC)
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 ;)
Member: rentner63
rentner63 Jul 06, 2017 at 07:30:56 (UTC)
Goto Top
OK, danke für Deine Antwort, aber der CDBL steht in meiner Codezeile doch auch drinnen, insofern?
Member: Aximand
Aximand Jul 06, 2017 at 08:24:08 (UTC)
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!