Hallo an alle!
Ich habe ein kleines Problem. Ich habe ein Formular welches 3 Textfelder (ungebunden) enthält. Jedes Textfeld hat die Ereignisroutine "Nach Aktualisierung". Nun möchte ich diese Routine die als Standardroutine erzeugt wird mit dem Namen "Textfeldname_afterupdate()" auf eine eigene Routine "umleiten" die "Test" heißt.
Fehlermeldung immer: Wenn "Test" ein neues Makro oder eine neue Makrogruppe ist, stellen Sie sicher, daß Sie es gespeichert und den Namen richtig eingegeben haben.
Ich habe schon alles mögliche probiert.
Je nachdem kommt auch die Meldung: Der Ausdruck gibt möglicherweise weder den Namen eines Makros noch den Namen einer benutzerdefinierten Funktion noch [Ereignisprozedur] zurück.
Wo ist das Problem eine Ereignisroutine auf ein eigenes Sub umzuleiten?
Die Sub habe ich als Privat, als Public etc. ausgetestet, immer mit dem gleichen Erfolg.
Google konnte mir auch nicht wirklich weiterhelfen.
Hallo,
wenn Du "alles mögliche" probiert hättest, hättest Du wohl schon eine Lösung.
Du kannst ein Control an eine VBA-Ereignisprozedur binden, an ein Makro (Makro ist in Access etwas Anderes als in Word und Co, wo damit VBA gemeint ist!), oder an eine VBA-Funktion mit "=NameDerFunktion()".
Damit letzteres geht, muß die Funktion (keine Sub!) in einem Standardmodul stehen und als "Public" deklariert werden.
Die Funktion muß dann einen Wert zurückgeben, der dann in der Textbox dargestellt wird (diese kann nicht mehr manuell editiert werden). Das geht hier ja nicht, denn ein Read-Only-Feld kann natürlich auch kein AfterUpdate feuern.
Auf Makros solltest Du generell verzichten. Das ist MS-Kokolores und hat sich zum Glück bis heute nicht durchgesetzt. Dazu wirst Du auch nur wenig Hilfe finden.
Mit [Ereignisprozedur] wird eine VBA-Ereignis-Sub erstellt, die immer als Private deklariert wird, die man selbst nie aufrufen sollte und die keinen Wert zurückgibt. Hier kannst Du machen, was Du willst.
Die "edle" Variante Deines Problems wäre es, ein Eventklassenmodul zu erstellen, das dann die Ereignisprozedur enthält und die gewünschten Controls abarbeitet. Ich vermute aber, bei dem anzunehmenden Kenntnisstand ist das eine Nummer zu groß.
Der einfachste Fall ist, daß Du eine Sub innerhalb des Formulares erstellst (die darf ruhig Private sein) und diese in den AfterUpdate-Eventprozeduren aufrufst. Einfach umzusetzen.
Wenn Du die Sub in vielen Formularen brauchst, solltest Du wieder eine Public Sub in einem Standardmodul verwenden, die Du in den einzelnen AfterUpdate-Prozeduren aufrufst. Als Parameter empfiehlt sich mindestens "ctlTextbox As Access.Textbox", dann kannst Du in den AfterUpdate-Prozeduren die Sub aufrufen mit "Me.MeineTextbox1". In der Sub hast Du dann über ctlTextbox den Zugriff auf das gewünschte Textbox-Control.
Wenn Du die Eventumleitung kennenlernen willst, schau Dir die Demodatenbank "ButtonArray" auf meiner Downloadseite (https://www.ccedv.de) an, die zeigt, wie das geht (Click-Event aller Buttons wird auf eine Eventklasse umgeleitet).
Also dann...ran an's Basteln!
Gruß
Christian
Hallo Bitsqueezer,
wenn du mir jetzt noch sagst wie ich die Buttonarray Datei runterladen kann wäre diese Lösung das richtige für mich!
Grüße Rainer
ok...habs gefunden mit dem Download...danke erst einmal
Lg
Rainer
Hallo Christian,
nachdem ich mir deinen Code angeschaut habe wird mir jetzt einiges klar.
Nun zur Umsetzung: deine einfachste Variante hatte ich selbst gefunden, mir widerstrebt es jedoch 3 Events als Subroutinen zu haben die dann die gleiche Sub aufrufen!!
Ich bin davon ausgegangen das Access in der Lage ist eine sub anzunehmen die die Ereignisprozedur ersetzen kann!!
Da es sehr umständlich ist in Access auf controls zuzugreifen (ich arbeite normalerweise mit Tokyo 10.2)
wird mir jetzt klar warum es keine vernünftige Erklärung dieser Vorgänge über Google zu finden gibt.
Vielen Dank für deine Hilfe!!
Ich werde deine Lösung des Eventhandlers umsetzen.
Lg
Rainer
P.S. Ich setze das Thema auf beendet
Hallo Rainer,
freut mich, wenn es Dir geholfen hat. Tokyo kenne ich nur als Stadt :)
Aber nach etwas Google ergibt sich, daß es um RAD Studio geht (habe ich aber auch noch nie mit gearbeitet). Das kennt man zumindest vom Hörensagen.
Gruß
Christian