Datenaktualisierung aus Formular mit Hilfe eines Moduls (VBA)

Peter_ @, Mittwoch, 20.01.2016, 16:01 (vor 1420 Tagen)

Hallo, ich habe ein Problem - klar.
Vielleicht findet sich jemand, der mir helfen kann?

Ich arbeite mit Windows7 / Access2007.
Das Problem: Wie ändere ich Daten in einer Tabelle aus einer Formulareingabe heraus mit Hilfe einer Prozedur (Sub/Function) in einem Modul.
(Erläuterung dieses langen Satzes weiter unten :-)).

Beschreibung:
In dem Eingabeformular einer Tabelle mit Adressen werden die üblichen Adressdaten erfasst (Name und Anschrift).
Nach Verlassen der Eingabefelder im Formular (z.B. Feld 'Anrede') sollen einige Daten überprüft und ggf. verändert werden.
Das funktioniert bei der Prozedur direkt im Formular problemlos (s. nachstehende Beispiele 1 und 2).

Beispiel 1 - Feld 'Anrede':
------------------------------------
Private Sub Anrede_Exit(Cancel As Integer)
If Trim(Me.Anrede.Value) = "Herr" Then
Me.Anrede.Value = "Herrn"
Else
If Trim(Me.Anrede.Value) = "Frau" Then
Me.Anrede.Value = "Frau"
Else
If Len(Trim(Me.Nachname.Value)) > 0 Then
Me.Anrede.Value = "Frau/Herrn"
End If
End If
End Sub

Beispiel 2 - Feld 'Briefanrede':
------------------------------------------
Private Sub Nachname_Exit(Cancel As Integer)
If Trim(Me.Anrede.Value) = "Herrn" Then
Me.BriAnred.Value = "Sehr geehrter Herr"
Else
If Trim(Me.Anrede.Value) = "Frau" Then
Me.BriAnred.Value = "Sehr geehrte Frau"
Else
If Len(Trim(Me.Nachname.Value)) > 0 And IsNull(Me.Anrede.Value) Then
Me.BriAnred.Value = "Sehr geehrte Damen und Herren"
Else
Me.BriAnred.Value = "Sehr geehrte Damen und Herren"
End If
End If
End If

Erläuterung:
Da diese Prozeduren auch von anderen Stellen aufgerufen werden sollen, möchte ich diese nicht im Formular speichern sondern in einem separaten Modul.
Das heißt, jedesmal, wenn eines der Formular-Eingabefelder verlassen wird, sollen die Prozeduren abgearbeitet werden.
Zum Beispiel: Wenn ich den Nachnamen ändere, soll beim Verlassen des Feldes Nachname automatisch die Briefanrede ('Sehr geehrter Herr Muster') in diesem einen Datensatz aktualisiert werden.

In einer anderen Variante habe ich das Problem wie folgt gelöst:
Beim Anklicken einer Schaltfläche eines Formulars wird die gesamte Adressdatei in gewünschter Weise bearbeitet (s. nachstehendes Listing - hier nur der Anfang der ganzen Prozedur).
---------------------------------------------------
Option Compare Database
Option Explicit
---
Function AnredenGesamt(Anrede, Titel, Vorname, Nachname, AnsprPa, BriefAnr)
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblAdress")
rst.MoveFirst

Do Until rst.EOF
If Trim(Anrede) = "Herrn" Or Trim(Anrede) = "Herr" Then
Anrede = "Herrn"
Else
If Trim(Anrede) = "Frau" Then
Anrede = "Frau"
Else
If Len(Trim(Nachname)) > 0 And IsNull(Anrede) Then
Anrede = "Frau/Herrn"
End If
End If
End If
... ... ... usw.
--------------

Es geht also irgendwie nur um die richtige Syntax:
Wie bringe ich (z.B.) die Funktion "Nachname_Exit" des Formulares dazu, in dem aktuellen Datensatz das Feld 'Ansprechpartner' im Formular (und somit in der Tabelle) mit dem gewünschten String zu füllen?

Ich habe schon viele Varianten ausprobiert, fürchte aber, dass ich weit daneben liege - und hoffe jetzt auf einen Tipp ...
Gruß und danke schonmal vorab - Peter


gesamter Thread:

 RSS-Feed dieser Diskussion

powered by my little forum