Aufgabe 1: Umgang mit erforderlichen Feldern
Enthält eine Tabelle erforderlichen Felder, werden diese erst beim speichern des Datensatzes mit folgender Access-System-Meldung angefordert:
Diese Standard-Meldung ist bescheiden und lässt sich nicht beeinflussen.
Des Weiteren kommt jeweils eine Meldung für jedes einzelne erforderliche Feld, was nicht sehr Anwenderfreundlich ist.
Abhilfe Schaft hier ein VBA-Code, der über das Form-Event BeforeUpdate diesen Fall abfängt, um eine selbstdefinierte Meldung erscheinen zu lassen.
Selbstverständlich möchten wir nun diesen Anwenderfreundliche "Service" in sämtlichen Formularen zur Verfügung stellen.
Es liegt nah den VBA-Code unter BeforeUpdate in die anderen Formularen zu kopieren, mit Anpassung der erforderlichen Felder. Programm-Code der letztendlich dasselbe macht x-mal zu kopieren zeugte schon immer von schlechter Codierung. Hinzu kommt das in gewissen Formularen, die Event Prozedur BeforeUpdate bereits VBA-Code für andere Anforderungen enthält. Also können wir in diesen Fällen den Code nicht einfach 1:1 übertragen.
Daher ist die Idee entstanden den VBA-Code inkl. dem Form-Event BeforeUpdate in einer Klasse auszulagern. Somit muss in den Formularen lediglich die Klasse instanziiert werden, mit Übergabe der gewünschten erforderlichen Felder. Der VBA-Code selbst, der die Funktionalität umsetzt, steht somit nur einmalig in einem Klassenmodul.
Aufgabe 2: Formulare sollen mit den Schaltflächen
OK/Abbrechen/Übernehmen versehen werden
Die Schaltfläche 'OK' soll den aktuellen Datensatz speichern und das Formular schliessen.
Die Schaltfläche 'Abbrechen' soll den aktuellen Datensatz verwerfen (mit Rückfrage, falls erforderlich) und das Formular schließen.
Die Schaltfläche 'Übernehmen' soll den aktuellen Datensatz speichern und dabei nur aktiv sein, wenn der Datensatz sich im Änderungsmodus befindet.
Auch hier sollte der VBA-Code und die diversen Event-Prozeduren die dazu nötig sind nicht in den Formularen vervielfältigt werden.
Diese passen Thematisch sehr gut in unsere Klasse mit der Gültigkeitsprüfung, also lagern wir den VBA-Code mit den Form-/Button-Events auch in dieser Klasse aus.
Die Schaltfläche 'Abbrechen' soll den aktuellen Datensatz verwerfen (mit Rückfrage, falls erforderlich) und das Formular schließen.
Die Schaltfläche 'Übernehmen' soll den aktuellen Datensatz speichern und dabei nur aktiv sein, wenn der Datensatz sich im Änderungsmodus befindet.
Auch hier sollte der VBA-Code und die diversen Event-Prozeduren die dazu nötig sind nicht in den Formularen vervielfältigt werden.
Diese passen Thematisch sehr gut in unsere Klasse mit der Gültigkeitsprüfung, also lagern wir den VBA-Code mit den Form-/Button-Events auch in dieser Klasse aus.
Option Compare Database
Option Explicit
Dim cRV As
clsFormRecordValidation
Private Sub Form_Load()
Set cRV = New
clsFormRecordValidation
cRV.AddRequiredField
Me.TitleOfCourtesy
cRV.AddRequiredField Me.LastName
cRV.AddRequiredField Me.Country
cRV.AddRequiredField Me.ReportsTo
cRV.ButtonOK =
Me.cmdOK
cRV.ButtonApply =
Me.cmdApply
cRV.ButtonCancel =
Me.cmdCancel
End Sub
Private Sub Form_Close()
Set cRV = Nothing
End Sub
Die fertige Klasse integriert in einer Kleinem Beispiel kann hier heruntergeladen werden. Der VBA-Code ist kommentiert, in der Hoffnung, dass das Konzept verständlich wird. Ansonsten einfach Fragen stellen über die Kommentar-Funktion. Kritik (Positiv/Negativ) wie auch Anregungen sind erwünscht.
End Sub
Die fertige Klasse integriert in einer Kleinem Beispiel kann hier heruntergeladen werden. Der VBA-Code ist kommentiert, in der Hoffnung, dass das Konzept verständlich wird. Ansonsten einfach Fragen stellen über die Kommentar-Funktion. Kritik (Positiv/Negativ) wie auch Anregungen sind erwünscht.
Ich wünsche weiterhin viel Erfolg mit nicht nur guten VBA-Code, sondern zukünftig auch mit Klasse.