Formular für Liefer- und Rechnungsadressen

Wenn die Adressdaten Ihrer Kunden in einer expliziten Form mit Liefer- und Rechnungsadresse vorliegen, ist deren Handhabung recht einfach. Sie möchten eine Rechnung verschicken Verwenden Sie die Rechnungsadresse! Der Kunde hat ein Produkt bestellt Senden Sie es an die Lieferadresse! Fehlt nur noch ein Formular, mit dem Sie die vorliegenden Daten komfortabel pflegen und gegebenenfalls abgleichen können. Dieser Beitrag liefert das nötige Rüstzeug für ein solches Formular.

Umgang mit expliziten Adressen im Formular

Weiter oben haben wir erwähnt, dass die einfachste Variante diejenige ist, bei der Lieferadresse und Rechnungsadresse immer gefüllt sind. Dies sollte sowieso der Fall sein, wenn es sich dabei um verschiedene Adressen handelt, aber auch, wenn die Adressen gleich sind. In diesem Fall wird die eingegebene Adresse einfach in die noch leere Adresse übertragen.

Das Formular aus soll bei markiertem Kontrollkästchen chkLieferGleichRechnung gewährleisten, dass änderungen an der Lieferadresse auf die Rechnungsadresse übertragen werden und dass die Daten der Rechnungsadresse nicht direkt geändert werden können.

Außerdem soll man für Kunden, für die nur eine Lieferadresse, aber keine Rechnungsadresse vorliegt, die Lieferadresse durch Aktivieren der Option Lieferadresse entspricht Rechnungsadresse in die Rechnungsadresse kopieren können.

Schließlich fehlt noch das Pendant zu dieser Funktion, das die Rechnungsadresse über die Lieferadresse schreibt: Dies erledigt ein Klick auf die Schaltfläche Rechnungsadresse als Lieferadresse übernehmen. Das Ergebnis soll wie in Bild 1 aussehen.

pic002.png

Bild 1: Formular zur Bearbeitung von Rechnungs- und Lieferadressen

Erstellen des Formulars

Das Formular soll den Namen frmKunden erhalten, daher legen Sie dieses zunächst als Formular in der Entwurfsansicht an und speichern es unter diesem Namen. Fügen Sie dann die Tabelle tblKunden als Datenherkunft hinzu (s. Bild 2). Diese Tabelle wird im Detail im Beitrag Liefer-, Rechnungs- und sonstige Adressen (www.access-im-unternehmen.de/813) beschrieben.

pic003.png

Bild 3: Das Formular frmKunden in der Entwurfsansicht

Die Daten dieser Tabelle ordnen Sie beispielsweise wie in Bild 3 im Formularentwurf an. Dabei landen die Adressen für Lieferung und Rechnung jeweils in einem eigenen Bereich, allein die Kundennummer und das Feld LieferGleichRechnung werden außerhalb der in Rahmen-Steuerelementen eingefassten Adressdaten dargestellt.

pic001.png

Bild 2: Datenherkunft des Formulars

Damit Sie später unterscheiden können, ob Sie per VBA auf die Steuerelemente oder die als Steuerelementinhalt angegebenen Felder der Datenherkunft zugreifen, versehen wir die Steuerelementnamen mit entsprechenden Präfixen (etwa txtFirma statt Firma).

Das Kontrollkästchen chkLieferGleichRechnung: Es ist an das Feld LieferGleichRechnung gebunden und gibt an, ob Liefer- und Rechnungsadresse gleich sind.

Zusätzlich enthält das Formular zwei Schaltflächen, die sich zwischen den beiden Bereichen für Liefer- und Rechnungsadresse befinden. Die Schaltflächen heißen cmdLieferInRechnung und cmdRechnungInLiefer und dienen dazu, die komplette Lieferadresse als Rechnungsadresse zu übernehmen und umgekehrt.

Aktionen beim Anzeigen eines Kunden

Wenn das Formular den ersten Kundendatensatz nach dem Öffnen anzeigt oder der Benutzer mithilfe der Navigationsschaltflächen den Datensatz wechselt, muss das Formular prüfen, welchen Wert das Feld LieferGleichRechnung enthält, und die Steuerelemente entsprechend aktivieren beziehungsweise deaktivieren. Das Wechseln des Datensatzes löst das Ereignis Beim Anzeigen aus, für das wir die folgende Ereignisprozedur hinterlegen:

Private Sub Form_Current()
    RechnungssteuerelementeAktivieren
End Sub

Diese ruft lediglich eine weitere Prozedur namens RechnungssteuerelementeAktivieren auf, die wie in Listing 1 aussieht. Die Prozedur speichert den Wert des Feldes LieferGleichRechnung in der Variablen bolRechnungsadresseSperren und weist den darin enthaltenen Wert der Eigenschaft aller Steuerelemente zu, die sich auf die Rechnungsadresse beziehen.

Listing 1: Formularsteuerelemente aktivieren/deaktivieren

Private Sub RechnungssteuerelementeAktivieren()
    Dim bolRechnungsadresseSperren As Boolean
    bolRechnungsadresseSperren = Not Me!chkLieferGleichRechnung
    Me!cboAnredeID_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtEMail_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtFirma_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtLand_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtNachname_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtOrt_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtPLZ_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtStrasse_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!txtVorname_Rechnung.Enabled = bolRechnungsadresseSperren
    Me!cmdLieferInRechnung.Enabled = bolRechnungsadresseSperren
    Me!cmdRechnungInLiefer.Enabled = bolRechnungsadresseSperren
End Sub

Auch die beiden Schaltflächen cmdLieferInRechnung und cmdRechnungInLiefer werden deaktiviert, sollte bolRechnungsadresseSperren den Wert False enthalten.

Lieferadresse als Rechnungsadresse und umgekehrt

Die beiden Schaltflächen cmdLieferInRechnung und cmdRechnungInLiefer sollen es vereinfachen, die Lieferadresse als Rechnungsadresse zu übernehmen und umgekehrt. Ein Klick auf die Schaltfläche cmdLieferInRechnung löst so beispielsweise die Prozedur aus Listing 2 aus.

Listing 2: Aufruf der Prozedur zum Übertragen der Lieferadresse in die Rechnungsadresse

Private Sub cmdLieferInRechnung_Click()
    If MsgBox("Dies überschreibt die Rechnungsadresse mit der Lieferadresse. Fortsetzen", vbYesNo) = vbYes Then
        LieferadresseInRechnungsadresseSchreiben
    End If
End Sub

Diese Prozedur fragt den Benutzer zunächst per Meldungsfenster, ob dieser tatsächlich die Rechnungsadresse mit den Daten der Lieferadresse überschreiben möchte (s. Bild 4). Ist dies der Fall, ruft die Prozedur eine weitere Routine namens LieferadresseInRechnungsadresseSchreiben auf. Warum geschieht dies in einer eigenen Routine Ganz einfach: Weil die enthaltene Funktionalität auch noch von einer anderen Stelle aus aufgerufen werden soll.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar