PDA

Vollständige Version anzeigen : Euroumstellung per VBA + Doku


horse79
08.01.2002, 08:49
Hi,

ich möchte per VBA meine Währungsfelder in Euro umstellen (/1,95583 und anschliesend auf 2 Stellen runden!). Dabei soll eine neue Tabelle erstellt werden in der die alten und neuen Werte eines jeden Feldes gespeichert werden.

Hat hierzu schon jemand den Code?

Vielen Dank

md
09.01.2002, 08:26
Hallo Horse!
Das einfachste ist der Tip von Donkarl:

<a href="http://www.donkarl.com/AccessFAQ.htm?/FAQ/FAQ2Allgemein.htm" target="_blank">http://www.donkarl.com/AccessFAQ.htm?/FAQ/FAQ2Allgemein.htm</a>

P r o b l e m
Es ist keine Funktion zur kaufmännischen Rundung zu finden.
Bei Versuchen mit den Funktionen INT und FIX kommt es zu Ungenauigkeiten oder Fehlern z.B. bei negativen Zahlen. CDouble usw. runden nicht kaufmännisch sondern mathematisch d.h. auf die nächste gerade Zahl. Das gleiche gilt für die ab A00 eingebaute VBA-Funktion Round z.B. ergibt Round(1.085, 2) 1.08
(s.a. <a href="http://support.microsoft.com/support/kb/articles/Q225/3/30.ASP)" target="_blank">http://support.microsoft.com/support/kb/articles/Q225/3/30.ASP)</a>

U r s a c h e n
Access besitzt seltsamerweise keine eingebaute Funktion zur kaufmännischen Rundung.
Fließkommaberechnungen generell und Access-Datentypen sind ungenau.

L ö s u n g e n
Access-intern muss man sich einer selbstgebastelten Funktion bedienen.
Die kürzeste mir bekannte mit ausreichender Genauigkeit:

Function fctRound(varNr, Optional varPl = 2) As Double
' by Konrad Marfurt and ?, dressed ;-) by Karl Donaubauer

fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^ varPl)

End Function

Anmerkungen:
Auf vielfachen Wunsch habe ich Konrads Funktion behübscht, um sie leichter bedienbar zu machen.
Rundung auf 2 Dezimalstellen ist nun voreingestellt.
Bsp1: fctRound(1.025) - -> 1.03
Bsp2: fctRound(1.25, 1) --> 1.3
Bsp3: fctRound(1250, -2) --> 1300
Der Leerstring "" ist übrigens kein Fehler in der Funktion sondern der Haupttrick zwecks Genauigkeit.

Eine andere Möglichkeit zur kaufmännischen Rundung:
Falls Excel vorhanden ist, kann man die Excel-Tabellenfunktion Round verwenden (entspricht nicht der gleichnamigen VBA-Funktion). Beschreibung von Günther Ritter:

Man nehme:
Ein Modul, und Häkchen unter Extras.Verweise auf die EXCEL8.0 Library.
Beispiel Funktion für Runden:

Function RundZahl(a,b)
RundZahl=Excel.Application.Round(a, b)
End Function

wobei die Exelvariante am einfachsten ist. Die Rundungsfunktion läßt sich leicht in jede Abfrage einbauen.

MD