Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
972to976
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
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
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...

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

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

Anzeige
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

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

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

Anzeige
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

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

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige