Wie kann ich Pflichtfelder realisieren?

~ 0 min
09.07.2015 12:13
Lösung:

 Sie möchten die Eingabe des Anwenders überprüfen und dafür Sorge tragen, dass bestimmte Eingabefelder ausgefüllt sind.
[Update]: Zur Lösung dieses Problems steht Ihnen eine elegante Funktion in der Makrobibliothek Standard1 zur Verfügung (jedoch ohne farbliche Hervorhebung).

Problem:

Über einen Ereignismakro BEIM SPEICHERN prüfen Sie die Eingaben. Wurde ein Pflichtfeld nicht ausgefüllt, brechen Sie den Speichervorgang ab.

Makro:

' Wenn nicht alle Pflichtfelder ausgefüllt sind, wird die Adresse nicht gespeichert und geschlossen
' Es werden die Variablen zurückgesetzt FieldText = ""
ReDim preserve arrFelder(0)
dim iFelderCounter, FieldText, Feld
iFelderCounter = 0

' Jetzt übergeben wir die Felder in die Eigentliche Funktion
' Syntax: "FELDNAME"
CheckField "NameSalutation"
CheckField "Name1"
CheckField "NameAktion" 

' Jetzt erfolgt die Prüfung mit dementsprechender Ausgabe
If FieldText <> "" Then  
    MsgBox "Das Feld '" & FieldText & "' wurde nicht ausgefüllt", , "Pflichtfelder AG-VIP SQL"  
    For Each Feld in arrFelder
        CurrentForm.Controls(Feld).ColorBackground = vbYellow
    Next
    OnSave.Abort
End If

' Diese Funktion prüft, ob die Felder gefüllt sind oder nicht.
Sub CheckField(Field)
    Dim PropList, Prop, content
    content=""  
    If ActiveAddress.Fields(field).Type=110 Then
        Set PropList=ActiveAddress.Fields(Field).value  
        For Each Prop In Proplist   
            content=content & Prop & " "  
        Next  
        Set Prop=Nothing  
        Set PropList=Nothing  
    Else  
        content=ActiveAddress.Fields(Field).value  
    End If  
    If (CStr(content) = "" OR CStr(content)="0") Then   
        If FieldText <> "" Then   
            Redim preserve arrFelder(iFelderCounter)
            arrFelder(iFelderCounter) = ActiveAddress.Fields(Field).Name
            FieldText = FieldText & ", " & ActiveAddress.Fields(Field).NameLocale  
        Else
            arrFelder(iFelderCounter) = ActiveAddress.Fields(Field).Name    
            FieldText = ActiveAddress.Fields(Field).NameLocale   
        End If  
        iFelderCounter = iFelderCounter + 1
    ElseIf CurrentForm.Controls(Field).ColorBackground = vbYellow Then
        CurrentForm.Controls(Field).ColorBackground = vbWhite
    End If
End Sub

 

 

Notwendige Anpassungen: 

CheckField "NameSalutation"

In dieser Zeile übergeben Sie die zu überprüfenden Felder. Bitte die internen Feldnamen vewenden.

 

Wenn die nicht ausgefüllten Pflichtfelder farblich hervorgehoben werden sollen,
so kann das Makro nur auf Ansichtenebene beim Speichern verwendet werden.
Ansicht beim Speichern
Um die Farbe per Makro ändern zu können, muss das entsprechende Feld auf der Ansicht als Namen den "Datenfeld" Namen (interner Feldname) erhalten.
Name und Datenfeldbezeichnung identisch

 

Hinweis:
Um das Makro auch außerhalb einer Ansicht zu verwenden,
müssen die türkis markierten Makrozeilen auskommentiert oder entfernt werden.
Dadurch wird jedoch die farbliche Hervorhebung deaktiviert.

 

Tipp:
Bei Verwendung im Workflow kann über Makros auch eine Reaktion ausgewählt werden. Wird der Speichervorgang abgebrochen, bleibt die Reaktion aber vorausgewählt. In diesem Fall sollte der Makro also nicht nur den Speichervorgang abbrechen, sondern auch die Einstufung in eine bestimmte Reaktion zurücksetzen:

ActiveTicket.Transition = ""

 

 Änderungslog:

09.07.2015

  • Erweiterung um die Möglichkeit, die nicht ausgefüllten Pflichtfelder farblich hervorzuheben.

 

Durchschnittliche Bewertung 5 (2 Abstimmungen)

Kommentieren nicht möglich