Forums Neueste Beiträge
 

selbst erstellte Funktion: hat mal den gewünschten Erfolg, mal auch nicht

22/04/2009 - 16:33 von Stefan Paesch | Report spam
Moin zusammen!

Um "Standart-Programmierungen" schneller zu implementieren, möchte ich
mir einige Funktionen schreiben.
Wenn ein Textfeld verlassen wird, soll aus der Eingabe 2311 ein 23,11
(Zahl) gewandelt werden.
In den Direktbereich ausgegeben funktioniert dies, aber in dem txt-
feld der ursprünglichen Eingabe passiert nichts (es steht weiterhin
2311).
Ähnliche Funktion habe ich für Datum-Angaben. Aus 220409 wird
22.04.2009. Da funktioniert alles wie erwartet (allerdings mit
Replace, left und mid, keine Divison wie bei meiner
"Problemfunktion").
Wo liegt mein Fehler?

Vielen Dank für Eure Hilfe.

Gruß Stefan

ACC2007; Vista Home 64 bit


Auszug aus dem Code (Modul) verkürzt dargestellt (Fehlerbehandlung
weggelassen):


Public Function f3001(Wert)

'*************************************************************************************
' Funktion: automatische Kommmastelle im Format #.###,00
'*************************************************************************************

If IsNumeric(Wert) Then

Debug.Print "(1)" & vbTab & Wert 'Test
Wert = Replace(Wert, ",", "")
Debug.Print "(2)" & vbTab & Wert 'Test
Wert = Format(Wert / 100, "#,##0.00")
Debug.Print "(3)" & vbTab & Wert 'Test
End If

End Function
_______________________________________________

Funktionsaufruf im Form wie folgt:

Private Sub txtEingabe_BeforeUpdate(Cancel As Integer)
call f1001(me.txtBetragsfeld)
End Sub
 

Lesen sie die antworten

#1 Karl Donaubauer
22/04/2009 - 16:47 | Warnen spam
Stefan Paesch wrote:
Um "Standart-Programmierungen" schneller zu implementieren, möchte ich
mir einige Funktionen schreiben.
Wenn ein Textfeld verlassen wird, soll aus der Eingabe 2311 ein 23,11
(Zahl) gewandelt werden.
In den Direktbereich ausgegeben funktioniert dies, aber in dem txt-
feld der ursprünglichen Eingabe passiert nichts (es steht weiterhin
2311).
Ähnliche Funktion habe ich für Datum-Angaben. Aus 220409 wird
22.04.2009. Da funktioniert alles wie erwartet (allerdings mit
Replace, left und mid, keine Divison wie bei meiner
"Problemfunktion").
Wo liegt mein Fehler?
...
Auszug aus dem Code (Modul) verkürzt dargestellt (Fehlerbehandlung
weggelassen):

Public Function f3001(Wert)

'*************************************************************************************
' Funktion: automatische Kommmastelle im Format #.###,00
'*************************************************************************************

If IsNumeric(Wert) Then

Debug.Print "(1)" & vbTab & Wert 'Test
Wert = Replace(Wert, ",", "")
Debug.Print "(2)" & vbTab & Wert 'Test
Wert = Format(Wert / 100, "#,##0.00")
Debug.Print "(3)" & vbTab & Wert 'Test
End If

End Function
_______________________________________________

Funktionsaufruf im Form wie folgt:

Private Sub txtEingabe_BeforeUpdate(Cancel As Integer)
call f1001(me.txtBetragsfeld)
End Sub



Bist du sicher, dass das so für andere Felder funktioniert
oder hast du mit "verkürzt dargestellt" untertrieben?
Beim Drüberschauen sind da gleich mehrere Fehler drin:

1. Die Funktion hat keinen Rückgabewert. Also am Ende:
f3001=Wert

2. Im Ereignis BeforeUpdate kann man nicht den Feldwert àndern.
Das müsste eine Fehlermeldung geben à la "Die Prozedur hindert
das arme Access am Speichern...".

3. In der aufrufenden Sub wird der nicht existente Rückgabewert
eh nicht an das Feld übergeben. ;-)

Me!txtBetragsfeld = f3001(Me!txtBetragsfeld)

4. Es wird die falsche Funktion aufgerufen:
f1001 <> f3001

HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
3. SQL Server-Entwickler-Konferenz - Nürnberg im Mai

Ähnliche fragen