Wie kann ich Pflichtfelder realisieren?
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.
Um die Farbe per Makro ändern zu können, muss das entsprechende Feld auf der Ansicht als Namen den "Datenfeld" Namen (interner Feldname) erhalten.
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.