Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahlenformat in Variablen/Textfeldern

Zahlenformat in Variablen/Textfeldern
25.04.2008 20:07:34
Gussfuss
Hallo liebe Forumler,
ich hoffe, Ihr könnt mir helfen - allein krieg ich´s mit dem Zahlenformat nicht richtig hin.
ich hab ein Userform gebastelt, wo zum einem eine Combobox vorhanden ist, mit der man zwischen verschiedenen Blumensorten wählen kann, dann gibt es ein Textfeld für Anzahl, Preis und Rechnungsbetrag. Der Preis ist abhängig von der gewählten Blumensorte (s.u.), leider hab ich es da schon nicht hinbekommen, diese als Konstanten so zu definieren, dass in dem Textfeld "Preis" .z.B. 2,50 €
ausgewiesen werden, unten mein (auskommentierter) kläglicher Versuch---> die letze "0" wird dann abgeschnitten...
Vor allem beim Rechnungsbetrag (Anzahl * Preis + evtl. MWST) krieg ich das Format nicht hin(Betrag soll auf 2 Stellen gerundet + EUR zeichen...)
danach wird das ganze ausgelesen, hier ein kleiner Ausschnitt...
'If ActiveDocument.Bookmarks.Exists("Betrag") Then
' With Selection
' .GoTo what:=wdGoToBookmark, Name:="Betrag"
' .TypeText currechnungsbetrag
'End With
anbei der Code für die Combobox und den Commandbutton "Berechnen"
Ich hoffe, ich kann auf Euch zählen :-) Anregungen und Verbesserungsvorschläge bezgl. der wahrscheinlich umständlichen Programmierweise sind sehr willkommen....
Danke im Voraus!
Gussfuss

Private Sub cboProdukt_Change()
Dim CintNelken As Currency
Dim CintRosen  As Currency
Dim CintGerbera As Currency
Dim CintTulpen As Currency
Dim CintSonnenblumen As Currency
Dim CandereBlume As Currency
Dim intblumenart As String
With Me
intblumenart = cboProdukt
'CintNelken = Format$(2#, "#,###.00 EUR")
'CintRosen = Format$(3#, "#,###.00")
'CintGerbera = Format$(2,50, "#,###.00")
'CintTulpen = Format$(1,50, "#,###.00")
'CintSonnenblumen = Format$(5#, "#,###.00")
'CandereBlume = Format$(0#, "#,###.00")
If intblumenart = "Nelken" Then
'.txtEinzelbetrag.Text = CintNelken & " €"
.txtEinzelbetrag.Text = "2,00" & " " & "€"
ElseIf intblumenart = "Rosen" Then
'.txtEinzelbetrag.Text = CintRosen & " €"
.txtEinzelbetrag.Text = "3,00" & " " & "€"
ElseIf intblumenart = "Gerbera" Then
'.txtEinzelbetrag.Text = CintGerbera & " €"
.txtEinzelbetrag.Text = "2,50" & " " & "€"
ElseIf intblumenart = "Tulpen" Then
'.txtEinzelbetrag.Text = CintTulpen & " €"
.txtEinzelbetrag.Text = "1,50" & " " & "€"
ElseIf intblumenart = "Sonnenblumen" Then
'.txtEinzelbetrag.Text = CintSonnenblumen & " €"
.txtEinzelbetrag.Text = "5,00" & " " & "€"
Else
'.txtEinzelbetrag.Text = CandereBlume & " €"
.txtEinzelbetrag.Text = "0,00" & " " & "€"
End If
End With
End Sub



Private Sub cmdberechnen_Click()
Dim intAnzahl As Integer
Dim inteinzelbetrag As Currency
Dim intSumme As Currency
Dim intEndbetrag As Currency
With Me
On Error GoTo Fehler:
intAnzahl = .txtAnzahl.Value
inteinzelbetrag = txtEinzelbetrag.Value
intSumme = intAnzahl * inteinzelbetrag
End With
If Me.optMwST7.Value = True Then
intEndbetrag = intSumme * 107 / 100
ElseIf Me.optMwST16.Value = True Then
intEndbetrag = intSumme * 116 / 100
Else
intEndbetrag = intSumme
End If
Me.txtRechnungsbetrag = CCur(intEndbetrag) & " " & "€"
Exit Sub
Fehler: 'Abfangroutine
On Error Resume Next
MsgBox "Bitte nur numerische Werte eingeben!", vbCritical, "Abbruch"
End Sub


....
danach sollen die Daten in ein Word.doc ausgeliefert, klappt alles ...bis auf das Format des Rechnungsbetrages...

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenformat in Variablen/Textfeldern
26.04.2008 11:58:00
Reinhard
Hi Grussfuss,
benutze bitte leerzeichen zum Einrücken,
intblumenart = "Nelken" ist was für Querdenker, strBblumenart = "Nelken" ist besser, bei vielen ElseIf besser select case nehmen.

If intblumenart = "Nelken" Then
'.txtEinzelbetrag.Text = CintNelken & " €"
.txtEinzelbetrag.Text = "2,00" & " " & "€"
ElseIf intblumenart = "Rosen" Then
'.txtEinzelbetrag.Text = CintRosen & " €"
.txtEinzelbetrag.Text = "3,00" & " " & "€"
ElseIf intblumenart = "Gerbera" Then
'.txtEinzelbetrag.Text = CintGerbera & " €"
.txtEinzelbetrag.Text = "2,50" & " " & "€"
ElseIf intblumenart = "Tulpen" Then
'.txtEinzelbetrag.Text = CintTulpen & " €"
.txtEinzelbetrag.Text = "1,50" & " " & "€"
ElseIf intblumenart = "Sonnenblumen" Then
'.txtEinzelbetrag.Text = CintSonnenblumen & " €"
.txtEinzelbetrag.Text = "5,00" & " " & "€"
Else
'.txtEinzelbetrag.Text = CandereBlume & " €"
.txtEinzelbetrag.Text = "0,00" & " " & "€"
End If
Select Case intblumenart
Case "Nelken"
.txtEinzelbetrag.Text = "2,00" & " " & "€"
Case "Rosen"
.txtEinzelbetrag.Text = "3,00" & " " & "€"
Case Else
.txtEinzelbetrag.Text = "0,00" & " " & "€"
End Select


Gruß
Reinhard

Anzeige
AW: Zahlenformat in Variablen/Textfeldern
26.04.2008 12:15:44
Gussfuss
Hallo Reinhard,
danke schon mal für die Anregungen..
hast Du noch eine Idee, wie ich das Format des Rechnungsbetrages auf 107,00 € bringe,
da steht bei mir dann leider nur 107 €, also hinter dem Komma sollen entweder die 2 Dezimalstellen mit 2 * "0" aufgefüllt werden und bei krummen Beträgen soll auf 2 Decimalstellen aufgerundet werden.
Me.txtRechnungsbetrag = CCur(intEndbetrag) & " " & "€"
Gruss
Gussfuss

Anzeige
AW: Zahlenformat in Variablen/Textfeldern
26.04.2008 12:28:00
Reinhard
Hi Grussfuss,
muß leider weg, aber auf die Schnelle ,Integer ist doch Ganzzahlig!

Sub test()
Dim a As Integer, b As Single
a = 1.234
b = 1.234
MsgBox a & " - " & b
End Sub


Gruß
Reinhard

AW: Zahlenformat in Variablen/Textfeldern
26.04.2008 13:08:10
Gussfuss
Hallo Reinhard,
Du hast Recht, an der Variablendeklaration muss ich noch arbeiten...,
hab daraus jetzt mal:
Dim sngendbetrag as single
gemacht..., aber ich bekomme es immer noch nicht hin, dieser variablen das richtige Format (z.B, 107,00 € oder auch 97,32 €) zuzuweisen, und diese Zahlen richtig in meinem Txtfeld "txtRechnungsbetrag" auszuweisen
Danke für Deine schnelle Hilfe und schönes WE!
Gruss
Gussfuss

Anzeige
Teilerfolg...
26.04.2008 14:13:00
Gussfuss
Hallo,
hab mir mit einer hilfsvariablen (ainteger), die ich als Integer deklariert habe. teilweise geholfen,
somit wird eine Zahl, die ganzahlig ist mit 2 Nullen hinter dem Komma ausgewiesen und auch
97,48 € werden richtig ausgewiesen,
bloß: 97,50 € stehen da immer noch als 97,5...da fehlt noch immer die "0"
geht bestimmt auch geschickter....
Gruss
Gussfuss
sngeinzelbetrag = txtEinzelbetrag.Value
sngSumme = intAnzahl * sngeinzelbetrag
End With
ainteger = sngEndbetrag
If sngEndbetrag ainteger Then
sngEndbetrag = Format(sngEndbetrag, "#,##0.00")
Me.txtRechnungsbetrag = CCur(sngEndbetrag) & " " & "€"
Else
Me.txtRechnungsbetrag = CCur(sngEndbetrag) & ",00 " & "€"
End If

Anzeige
AW: Teilerfolg...
26.04.2008 17:21:00
fcs
Hallo Gussfuss,
ich hab mal versucht dein Userform nachzubauen.
Der Versuch, die Zahlen in einem Userform in einem "hübschen" Format darzustellenn und dann auch noch mit den Textbox-Inhalten Berechnungen durchzuführen, beinhaltet wie du schon bemerkt hast etliche Fallen.
Am besten ist es meiner Meinung nach, die Zahlenwerte in separaten Variablen zu verwalten und die Textboxinhalte dann per Format(Zahl, FormatString) mit Leben zu füllen.
Beim Auslesen solcher Textboxinhalte muss man dann immer eine Konversion mit CDbl, CInt, CDate, CCur durchführen. Ist die Währung Inhalt des Textboxinhalts, dann muss diese vor der Umwandlung "abgeschnitten" werden.
In deinem Code ist mir aufgefallen, dass du die Preise der verschiedenen Blumensorten im Code festlegt. Besser ist es diese in einer Presiliste in einer Tabelle festlulegen, der man einen Bereichsnamen verpasst. Das macht auch die Datenpflege einfacher.
Dazu legst du deine Combobox mit den Blumen 2-spaltig an, 1. Spalte Blumen, 2. Spalte Einzelpreis. Mit dem Changeereignis der Combobox überträgst du dann den Preis in die Textbox.
Des weiteren ist es empfehlenswert die Textboxen mit denen gerechnet werden soll nicht leer zu lassen, sondern im Formulareditor oder in der Intialiserungsprozedur auf einen sinnvollen Wert zu setzen z.b. 0. Dann gibt es beim Rechen/der Konverion des Textboxinhaltes weniger Fehlermeldungen.
Den Code zum Eintragen der Werte in das Worddokument kann man auch etwas eleganter gestalten. Man kann die Werte direkt an die Textmarken schreiben. Zahlen müssen dabei per Format(zahl, Formatstring) in Word eingetragen werden.
Hier die Datei mit dem UF, wie ich es aufbauen würde:
https://www.herber.de/bbs/user/51890.xls
Gruß
Franz

Anzeige
AW: Teilerfolg...
26.04.2008 21:33:55
Gussfuss
Mensch Franz,
danke für die ganze Mühe, ich hab dadurch echt viel gelernt, sehr gute Idee, dass man die produkte/preise
nicht nur im code abändern kann, genauso die Zeilen:
If Me.txtAnzahl "" Then Call berechnen
....
If Me.txtAnzahl "" And Me.txtEinzelbetrag "" Then
Call berechnen
somit kann man sich den Button Berechnen eigentlich sogar sparen und niemand kann vergessen, eine Aktualisierung vornzunehmen, bevor er die Daten übergibt...
wünsch Dir noch ein schönes WE!
Du hast mir meins verschönert....
Gruss
Günther

Anzeige
eine Frage noch, Franz....
26.04.2008 22:21:00
Gussfuss
Hallo Franz,
kannst Du mir erklären, wie Du den Bereich für die Combobox festgelegt hast?
With Me
With .cboProdukt
strBlumenart = .Value
curEinzelpreis = CCur(.List(.ListIndex, 1))
Danke und Gruss
Günther

AW: eine Frage noch, Franz....
27.04.2008 00:41:00
fcs
Guten Morgen Günther,
wie in der Datei beschrieben ist für den Bereich mit den Daten (Blumen und Einzelpreise) ein Name festgelegt.
Dieser Name muss im VBA-Formular-Editor bei den Eigenschaften der Combobox im UF unter "RowSource" eingetragen werden.
Gruß
Franz

Anzeige
habs hinbekommen, danke für die Hilfe!
26.04.2008 16:35:06
Gussfuss
Hallo,
jetzt klappt es :-)
danke für die Hilfe...
Gruss
Gussfuss
sngeinzelbetrag = txtEinzelbetrag.Value
sngSumme = intAnzahl * sngeinzelbetrag
End With
If Me.optMwST7.Value = True Then
sngEndbetrag = sngSumme * 107 / 100
ElseIf Me.optMwST16.Value = True Then
sngEndbetrag = sngSumme * 116 / 100
Else
sngEndbetrag = sngSumme
End If
sngEndbetrag = Round(sngEndbetrag, 2)
sngEndbetrag = Format$(sngEndbetrag, "#,##0.00 €")
Me.txtRechnungsbetrag = sngEndbetrag
txtRechnungsbetrag = Format$(txtRechnungsbetrag, "#,##0.00 €")
und auch der Übertrag (als string)
Dim strrechnungsbetrag As String
strvorname = .txtVorname
strname = .txtName
intAnzahl = .txtAnzahl
strrechnungsbetrag = .txtRechnungsbetrag
...
If ActiveDocument.Bookmarks.Exists("Betrag") Then
With Selection
.GoTo what:=wdGoToBookmark, Name:="Betrag"
.TypeText strrechnungsbetrag
End With
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zahlenformat in Variablen und Textfeldern richtig einstellen


Schritt-für-Schritt-Anleitung

  1. Variablen definieren: Stelle sicher, dass Du die richtigen Datentypen für Deine Variablen wählst. Verwende z.B. Currency für Beträge, um Präzision zu gewährleisten:

    Dim inteinzelbetrag As Currency
  2. Zahlen formatieren: Nutze Format$ oder CCur beim Zuweisen und Ausgeben von Werten in Textfeldern:

    txtEinzelbetrag.Text = Format$(CintNelken, "#,##0.00 €")
  3. Rechnungsbeträge berechnen: Multipliziere die Anzahl mit dem Einzelbetrag und berücksichtige eventuell die Mehrwertsteuer:

    intEndbetrag = intSumme * (1 + Mehrwertsteuersatz)
  4. Zahlen formatieren: Stelle sicher, dass der Rechnungsbetrag mit zwei Dezimalstellen und dem Euro-Zeichen angezeigt wird:

    Me.txtRechnungsbetrag = Format$(intEndbetrag, "#,##0.00 €")
  5. Text in Word übertragen: Wenn Du die Daten in ein Word-Dokument überträgst, achte darauf, dass das Format korrekt ist:

    With Selection
       .GoTo what:=wdGoToBookmark, Name:="Betrag"
       .TypeText Format$(intEndbetrag, "#,##0.00 €")
    End With

Häufige Fehler und Lösungen

  • Problem: Der Rechnungsbetrag wird ohne Dezimalstellen angezeigt.

    • Lösung: Verwende die Format-Funktion, um sicherzustellen, dass immer zwei Dezimalstellen angezeigt werden:
      Me.txtRechnungsbetrag = Format$(intEndbetrag, "#,##0.00 €")
  • Problem: Fehler bei der Umwandlung von Werten.

    • Lösung: Stelle sicher, dass Du die Eingabewerte aus den Textfeldern korrekt konvertierst, z.B. mit CCur oder CDbl:
      inteinzelbetrag = CCur(txtEinzelbetrag.Value)

Alternative Methoden

  • Datenbank für Preise: Anstatt die Preise im Code festzulegen, kannst Du eine Tabelle in Excel erstellen, die die Blumensorten und deren Preise enthält. Dies vereinfacht die Wartung und Anpassung.

  • Combobox mit Preisen: Setze die Combobox so auf, dass sie die Preise direkt aus einer Tabelle bezieht, um Fehlerquellen zu minimieren.


Praktische Beispiele

Hier ist ein Beispiel für die korrekte Berechnung und Formatierung des Rechnungsbetrags:

Private Sub cmdberechnen_Click()
    Dim intAnzahl As Integer
    Dim inteinzelbetrag As Currency
    Dim intSumme As Currency
    Dim intEndbetrag As Currency

    intAnzahl = CInt(txtAnzahl.Value)
    inteinzelbetrag = CCur(txtEinzelbetrag.Value)
    intSumme = intAnzahl * inteinzelbetrag

    intEndbetrag = intSumme * 1.07 ' Bei 7% MWST
    Me.txtRechnungsbetrag = Format$(intEndbetrag, "#,##0.00 €")
End Sub

Tipps für Profis

  • Nutze Select Case anstelle vieler If...ElseIf-Anweisungen, um den Code übersichtlicher zu gestalten:

    Select Case intblumenart
      Case "Nelken"
          txtEinzelbetrag.Text = Format$(2, "Currency")
      Case "Rosen"
          txtEinzelbetrag.Text = Format$(3, "Currency")
      ' Weitere Fälle...
    End Select
  • Achte darauf, die Eingabewerte vor Berechnungen zu validieren, um Laufzeitfehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Betrag immer zwei Dezimalstellen hat?
Verwende die Format-Funktion, um sicherzustellen, dass das Format immer korrekt ist, z.B. Format$(Betrag, "#,##0.00 €").

2. Was ist der Unterschied zwischen CCur und Format?
CCur konvertiert einen Wert in den Datentyp Currency, während Format den Wert in einen formatierten Text umwandelt, ohne den Datentyp zu ändern.

3. Wie kann ich mit vba zahlenformate umgehen?
Nutze die Format-Funktion, um sicherzustellen, dass alle Werte gemäß den gewünschten vba zahlenformaten angezeigt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige