PDA

Vollständige Version anzeigen : Formatierung einer Währungsanzeige


NilsR
14.03.2007, 09:47
Hallo,

ich habe, wie sollte es auch anders sein, mal wieder ein Problem.
Ich arbeite gerade an einem Eingabeformular, wo in einige der Textfelder Geldwerte eingegeben werden, sprich 100$, 200$ oder was auch immer.
Der Anwender muss aber die Möglichkeit haben, zwischen Euro und Dollar zu wählen, also habe ich mir gedacht, formatier ich doch die Textfelder per VBA.
Dazu habe ich eine Kombobox erstellt, die zwei Einträge "Dollar" und "Euro" vorgenommen und habe dann in das After_Update Ereignis der Kombobox folgenden Code eingegeben:

Private Sub CurrEinleih_AfterUpdate()

If Me!CurrEinleih.Value = "Euro" Then
Me!DepositEinleih = Format(Me!DepositEinleih, "###.##0,00€")
Me!perdayEinleih = Format(Me!perdayEinleih, "###.##0,00€")
Me!minpermonth = Format(Me!minpermonth, "###.##0,00€")
Me!perhourEinleih = Format(Me!perhourEinleih, "###.##0,00€")
Me!perhour110einleih = Format(Me!perhour110einleih, "###.##0,00€")
Me!perhour115einleih = Format(Me!perhour115einleih, "###.##0,00€")
Me!perhour120einleih = Format(Me!perhour120einleih, "###.##0,00€")
Me!perhour125einleih = Format(Me!perhour125einleih, "###.##0,00€")
Me!perhour130einleih = Format(Me!perhour130einleih, "###.##0,00€")
Else: If Me!CurrEinleih.Value = "Dollar" Then Me!DepositEinleih = Format(Me!DepositEinleih, "###.##0,00$")
Me!perdayEinleih = Format(Me!perdayEinleih, "###.##0,00$")
Me!minpermonth = Format(Me!minpermonth, "###.##0,00$")
Me!perhourEinleih = Format(Me!perhourEinleih, "###.##0,00$")
Me!perhour110einleih = Format(Me!perhour110einleih, "###.##0,00$")
Me!perhour115einleih = Format(Me!perhour115einleih, "###.##0,00$")
Me!perhour120einleih = Format(Me!perhour120einleih, "###.##0,00$")
Me!perhour125einleih = Format(Me!perhour125einleih, "###.##0,00$")
Me!perhour130einleih = Format(Me!perhour130einleih, "###.##0,00$")
End If

End Sub

Nun habe ich aber das Problem, dass Access das Format nicht übernimmt, sondern das aus dem Textfeld-Eigenschaften-Menü benutzt. Dort sind die Textfelder als "Allgemeine Zahl" eingestellt.
Wie muss der Code aussehen, damit das klappt? Oder muss ich irgendwas anderes verändern?
Hoffe auf eine schnelle Antwort und danke im Vorraus!

Lg Nils

elmar
14.03.2007, 09:58
Also hast Du ein Feld mit dem Felddatentyp "ZAHL". Stelle das doch einmal in der Tabelle (Entwurfsmodus) auf "TEXT" um. Danach sollte es gehen.

NilsR
14.03.2007, 10:09
Hab die entsprechenden Felder auf "Text" umgestellt, funktioniert leider trotzdem nicht. :(

elmar
14.03.2007, 10:28
Eigenschaftseinstellung FORMAT des Feldes im Formular hat welche Einstellung?? Darf keinen Eintrag haben, bei mir klappt es dann.

NilsR
14.03.2007, 10:35
Ahh, nu seh ichs auch, es klappt in der Tat....aber erst wenn man erneut in der Kombobox auswählt.

/edit Ok, soweit schaut das gut aus, nun ergeben sich noch 2 neue Probleme:

1. Die Format-Einstellung wird erst ausgeführt, nachdem ich in die entsprechenden Felder Werte eingetragen habe und dann erst meine Auswahl in der Kombobox treffe. Besser wäre es, wenn er die Einstellung schon übernimmt, bevor man Werte in die Felder eingibt und ggf. erneut auswählt. Geht das?

2. Er gibt mir die Zahlen mit 4 oder 5 Dezimalstellen an, ich will aber nur 2. Steckt der Fehler in meinem Code?

/edit 2

Das 2. Problem hab ich gelöst..... ich sag nur erst denken, dann posten....is halt so ne Sache mit den Punkten und Kommas bei Währungen ;)

elmar
14.03.2007, 11:08
Ereignisse gibt es mehrere: Vor Aktualisierung, Nach Aktualisierung, Bei Änderung usw.
Mal ausprobieren.

NilsR
14.03.2007, 13:12
Also die unterschiedlichen Ereignisse haben nichts gebracht, AfterUpdate ist das einzige, welches zumindest teilweise das gewünschte Ergebnis liefert, mit oben genanntem Problem halt.

NilsR
14.03.2007, 14:35
Ist es denn wirklich nicht möglich, die Währung zu ändern, ausser in der Ländereinstellung? Kann doch nicht möglich sein, dass man da so drauf festhängt!

hcscherzer
14.03.2007, 14:50
Über selbstdefinierte Formatanweisungen geht das schon.
z.B. #.##0,00 $ - aber Achtung: in VBA muss das so aussehenFormat(wert,"#,##0.00 $")
Ween aber das Währungsformat komplett amerikanisch dargestellt werden soll, ist etwas Handarbeit notwendig. Da ist ein Beispiel:http://ms-office-forum.net/forum/showpost.php?p=957945&postcount=2

NilsR
14.03.2007, 15:08
Jo, das mit der Formatierung hatte ich ja oben in meinem Code auch schon....
Aber das ganze funktioniert nicht zufriedenstellend, ich hab damit jetzt mal ein wenig rumgespielt und folgendes festgestellt:

1. Sind in den Textfeldern keine Werte eingegeben und ich wähle in meiner Kombobox "Euro" oder "Dollar" aus, so wird das damit verbundene Format bei anschließender Eingabe eines Wertes nicht umgesetzt, sprich es steht einfach bloß die eingegebene Zahl da (z.B. 2000) ohne Formatierung.

2. Habe ich einen Wert eingegeben und treffe dann in meiner Kombobox eine Auswahl, wird die entsprechende Formatierung vorgenommen, sprich wähle ich "Euro" aus, wird aus der 2000 eine 2.000,00€. Soweit so gut.

3. Jetzt kommt aber das richtig störende Problem: Wähle ich wie in 2. beschrieben "Euro" aus und wechsle später auf "Dollar", wird nur die Formatierung des gerade eingegebenen Wertes oder, wenn alle Werte schon drin standen und ich zwischendurch woanders was eingegeben habe, gar keine Formatierung geändert, alle Werte bleiben bei x.xxx,xx€. Habe ich zuvor "Dollar" ausgewählt und alle Werte sind in x.xxx,xx$ formatiert, ändert er sie in das oben beschriebene "Euro"-Format um, ohne zu murren. Dann tritt aber, wenn ich das Format wieder ändern will auf "Dollar", derselbe Effekt auf, wie wenn ich von Anfang an "Euro" ausgewählt habe, sprich die Formatierung ändert sich nicht.

Dein Vorschlag ist zwar sehr gut, hcscherzer, aber ob das jetzt original amerikanische Darstellung ist oder ob "." und "," wie in der europäischen Darstellung eingesetzt werden, ist mir erstmal egal. Mir gehts um das in 1.-3. beschriebene Problem, sprich er soll sofort nach Änderung meiner Auswahl in der Kombobox auch alle angesprochenen Textfelder entsprechend formatieren.


LG Nils

hcscherzer
14.03.2007, 15:15
Vielleicht fehlt einfach nur noch ein .Refresh nach dem End If für jedes Textfeld ?

NilsR
14.03.2007, 15:26
Mh, meinst du so ungefähr:

Private Sub CurrEinleih_AfterUpdate()

If Me!CurrEinleih.Value = "Euro" Then
Me!DepositEinleih = Format(Me!DepositEinleih, "###,##0.00€")
Me!perdayEinleih = Format(Me!perdayEinleih, "###,##0.00€")
Me!minpermonth = Format(Me!minpermonth, "###,##0.00€")
Me!perhourEinleih = Format(Me!perhourEinleih, "###,##0.00€")
Me!perhour110einleih = Format(Me!perhour110einleih, "###,##0.00€")
Me!perhour115einleih = Format(Me!perhour115einleih, "###,##0.00€")
Me!perhour120einleih = Format(Me!perhour120einleih, "###,##0.00€")
Me!perhour125einleih = Format(Me!perhour125einleih, "###,##0.00€")
Me!perhour130einleih = Format(Me!perhour130einleih, "###,##0.00€")
Me!percycleeinleih = Format(Me!percycleeinleih, "###,##0.00€")
Else: If Me!CurrEinleih.Value = "Dollar" Then Me!DepositEinleih = Format(Me!DepositEinleih, "###,##0.00$")
Me!perdayEinleih = Format(Me!perdayEinleih, "###,##0.00$")
Me!minpermonth = Format(Me!minpermonth, "###,##0.00$")
Me!perhourEinleih = Format(Me!perhourEinleih, "###,##0.00$")
Me!perhour110einleih = Format(Me!perhour110einleih, "###,##0.00$")
Me!perhour115einleih = Format(Me!perhour115einleih, "###,##0.00$")
Me!perhour120einleih = Format(Me!perhour120einleih, "###,##0.00$")
Me!perhour125einleih = Format(Me!perhour125einleih, "###,##0.00$")
Me!perhour130einleih = Format(Me!perhour130einleih, "###,##0.00$")
Me!percycleeinleih = Format(Me!percycleeinleih, "###,##0.00$")
End If

Me!DepositEinleih.Refresh
Me!perdayEinleih.Refresh
Me!minpermonth.Refresh
Me!perhourEinleih.Refresh
Me!perhour110einleih.Refresh
Me!perhour115einleih.Refresh
Me!perhour120einleih.Refresh
Me!perhour125einleih.Refresh
Me!perhour130einleih.Refresh
Me!percycleeinleih.Refresh

End Sub

Wenn ja, dann funktioniert das leider nicht :(

hcscherzer
14.03.2007, 17:51
Seltsam. Sehr seltsam.
Ich habe jetzt selbst mal ein wenig herumexperimentiert, und ähnliches beobachtet. Aber dieses Verhalten kann ich mir partout nicht erklären. Später mehr dazu.

hcscherzer
14.03.2007, 18:00
So, jetzt habe ich es, glaube ich:
setze mal für alle Textfelder das Format auf Währung und den Standardwert auf 0; dann den Standardwert für das Kombifeld auf €. Das .refresh ist nicht nötig.

NilsR
15.03.2007, 08:10
Hm, ich habs ausprobiert und es lieferte auch nicht das gewünschte Ergebnis, sprich es fand keine Umwandlung von Euro in Dollar statt, egal wann und wie ich was ausgewählt hab. :(
Ich probier grad ein bischen mit FormatCurrency rum, muss ja irgendwie gehen!

NilsR
15.03.2007, 08:24
Also wenn man die ganzen Format-Ausdrücke in FormatCurrency ändert, bekommt man einen Laufzeitfehler 13 "Typen nicht verträglich".....mich wundert, dass es weder hier im Forum noch von Microsoft einen bereits vorhandenen Lösungsvorschlag gibt, es müsste ja ansich selbstverständlich sein, dass man die Währung nach belieben umstellen kann.


LG Nils

hcscherzer
15.03.2007, 15:28
Moin Nils,
hatte ich mich nicht klar genug ausgedrückt?
NICHT die Formatanweisungen im Code ändern, die kannst Du so lassen.
Im Formularentwurf legst Du für die Textfelder das Format Währung" fest, damit erst mal überhaupt ein numerisches Format da ist. Sonst schreibt Access ja auch die ersten Eingaben linksbündig ... und, nicht vergessen, den Standardwert auf 0. So klappt es jedenfalls bei mir problemlos.

NilsR
16.03.2007, 07:57
Nein, ich habe mich scheinbar in Beitrag #15 nicht deutlich genug ausgedrückt: Ich habe es auf deine Weise probiert und es hat nicht 100%ig das gewünschte Ergebnis geliefert, sprich ich konnte von "Dollar" nach "Euro" wechseln und das Format wurde dann auch in den Textfeldern umgesetzt, umgekehrt ging es aber nicht.


MfG Nils