PDA

Vollständige Version anzeigen : Über Listbox Kommafehler


werner48
30.03.2012, 14:34
Hallo zusammen!
Folgendes Problem: Ich habe eine Listbox erstellt, die Daten aus einem wks (Artikel) einliest und diese Daten per dblClick in mein Rechnungsformular einfügt. Funktioniert soweit auch ganz gut. Nur beim Preis gibt´s ein Problem. Ich kann nur zwei Stellen nach dem Komma haben. Bei mehr Nachkommastellen werden lauter x angezeigt und das Komma wird ignoriert. Wie erreiche ich mehr Nachkommastellen? Hier der Code:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim ArtikelDatei As Workbook, Bereich As Range
Dim z As Integer, s As Integer
Set ArtikelDatei = Workbooks.Open("C:\users\werner\desktop\Rechnung\Artikel.xlsx")
Set Bereich = ArtikelDatei.Sheets("Tabelle1").UsedRange
With ListBox2
.Clear
.ColumnCount = Bereich.Columns.Count
For z = 1 To Bereich.Rows.Count
.AddItem
For s = 1 To Bereich.Columns.Count
.List(z - 1, s - 1) = Bereich.Cells(z, s)
Next
Next
End With
ArtikelDatei.Close SaveChanges:=False
Application.ScreenUpdating = True
End Sub

Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Application.ScreenUpdating = False
Dim lngZeile As Long
Dim wksTabelle As Worksheet
lngZeile = Selection.Row
Set wksTabelle = ActiveSheet
wksTabelle.Cells(lngZeile, 2).Value = ListBox2.Column(0)
wksTabelle.Cells(lngZeile, 3).Value = ListBox2.Column(1)
wksTabelle.Cells(lngZeile, 4).Value = ListBox2.Column(2)
wksTabelle.Cells(lngZeile, 6).Clear
Application.ScreenUpdating = True
UserForm2.Hide
End Sub
Vielen Dank schon mal, Werner

pefeu
30.03.2012, 15:00
Hallo Werner,

dann gib den Preisen doch ihr Format mit

wksTabelle.Cells(lngZeile, 2).Value = Format(ListBox2.Column(0), "#,##0.00")

oder so:
<Font Face="Courier New,FixedSys"Size=2><Blockquote>&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>With</FONT>&nbsp;wksTabelle.Cells(lngZeile,&nbsp;2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NumberFormat&nbsp;=&nbsp;"#,##0.00"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Value&nbsp;=&nbsp;ListBox2.Column(0)
&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>End</FONT>&nbsp;<FONT COLOR=#0000FF>With</FONT>
</Blockquote><Font Face="Courier New,FixedSys"Size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de/SyntaxHi.zip">Syntaxhighlighter 1.14</a></b></Font><Font Size=2></p>

Gruß Peter

werner48
30.03.2012, 15:43
Hi Pefeu!
Danke für deine schnelle Antwort! Funktioniert soweit, nur wird nicht gerundet. Der aktuelle Betrag ist z.B. 56,0747 €. Eigentlich sollte jetzt auf 56,08 gerundet werden, damit bei einem Mwst von 7% als Endbetrag 60.-€ rauskommen. Wenn ich die obige Zahl manuell eingebe wird automatisch gerundet. Warum jetzt nicht?
Ich hoffe du kannst mir da weiter helfen, Werner

pefeu
30.03.2012, 20:42
Hallo Werner,

versuche es so: .Value = Round(CDbl(ListBox2.Column(0)) + 0.005, 2)

Gruß Peter

Erich G.
31.03.2012, 06:03
Hi Peter,
bist du sicher, dass Werner hier die VBA-Rundung haben möchte? Meist wird eher Application.Round, also die Excel-Rundung erwartet.

Hier wäre es wohl
.Value = Application.RoundUp(CDbl(ListBox2.Column(0)), 2)

Dann ist auch gleich das Aufrunden ohne die 0.005 erledigt.

pefeu
31.03.2012, 13:40
Hallo Erich,

sicher bin ich mir nicht, es ist eben eine mögliche Lösung.

Deine Variante ist sicherlich die bessere.

Gruß Peter

werner48
01.04.2012, 13:54
Hallo Peter, Hallo Erich!
Vielen Dank für eure Antwort. Ich glaube ich muss meine Frage anders stellen. Ich habe in meiner Artikelliste einen Betrag von Netto 56,074766 stehen. Wenn ich nun diesen Betrag über die ListBox einfügen lasse wird das Komma ignoriert und lauter x sind zu sehen, da die Zahl 56074766 nicht in die Zelle passt. Es muss also mit vier bis sechs Nachkommastellen gerechnet werden, aber nur zwei in der Zelle angezeigt werden. In dem konkreten Beispiel hieße das, dass in der betreffenden Zelle 56,07 steht, aber zur Mwst-Berechnung die Zahl 56,074766 verwendet wird. Dadurch würde (bei 7%Mwst) der Endbetrag 60.-€ lauten.
Verwirrend, ich weiss. Aber ich muss es wissen, da das ein geläufiger Betrag bei uns ist und ich nicht ständig manuell das Komma einfügen möchte.
Wär schön wenn ihr mir weiter helfen könntet.
Scönen Sonntag noch
Gruss Werner
P.S. Hat ListBox eine Eigenschaft, die nur zwei Nachkommastellen weiter gibt? Und wenn ja wo ändere ich diese Eigenschaft?

pefeu
01.04.2012, 16:17
Hallo Werner,

versuche es so:

With wksTabelle.Cells(lngZeile, 2)
.NumberFormat = "#,##0.00"
.Value = Replace(ListBox2.Column(0), ",", ".")
End With

Gruß Peter

Erich G.
01.04.2012, 16:43
Hi Werner,
so klappt das bei mir auch:Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngZeile As Long

lngZeile = Selection.Row
With ActiveSheet
.Cells(lngZeile, 2).Resize(, 3).NumberFormat = "#,##0.00"
.Cells(lngZeile, 2).Value = CDbl(ListBox2.Column(0))
.Cells(lngZeile, 3).Value = CDbl(ListBox2.Column(1))
.Cells(lngZeile, 4).Value = CDbl(ListBox2.Column(2))
.Cells(lngZeile, 6).Clear
End With
UserForm2.Hide
End Sub