Hi. Ich habe in einem Formular Felder, welche unbedingt ausgefüllt werden müssen. Bei den betreffenden Feldern handelt es sich um Textfelder. In die Eigenschaften habe ich die Gültigkeitsregel "Ist nicht Null" eingegeben und bei Gültigkeitsmeldung habe ich einen freundlichen Text geschrieben.
Leider zeigen diese Einstellungen keinerlei Wirkung. Ich kann die Felder ganz einfach via Tabulator überspringen oder das Formular schließen.. Es ist so, als ob ich gar keine Gültigkeits Eigenschaften erfasst habe.
Woran liegt das oder mache ich was grundlegendes falsch? Ich finde auch nicht die Eigenschaft "Eingabe erforderlich"...
LG und schon mal Danke.
Hi,
je nach Aufbau, evtl. einfach als Pflichtfeld in der zugrunde liegenden Tabelle?!
Gruss
Jens
Regeln, die unbedingt einzuhalten sind, würde man primär in der Tabellendefiniton (Tabellenentwurf) hinterlegen, denn da gelten sie immer, also nicht nur bei Formulareingaben, sondern auf bei Aktionsabfragen oder Recordsetaktionen auf die Tabelle wie auch beim händischen Betrieb an der Tabelle.
Das Trifft leider nicht zu. Ich verwalte in der gleichen Tabelle verschiedene Typen von Kontakten. Nur bei einem müssen die entsprechenden Felder ausgefüllt werden, beim anderen nicht. Ich nutze für die unterschiedlichen Typen auch unterschiedliche Formulare zur Erfassung der Daten.
Also bleibt ggf. nur ein Workaround via VBA mit dem Ereignis "beim verlassen"... oder?
Hallo,
ZitatNur bei einem müssen die entsprechenden Felder ausgefüllt werden, beim anderen nicht.
das riecht nach einem verbesserungsbedürftigen Datenmodell.
Erkläre mal, warum das so ist.
Nein, nicht gleich so hoch greifen ;) Stell dir einfach eine Tabelle mit Geschäftskontakten vor. Diese werden unterteilt in Kunden und Leads (also Soll-Kunden/Interessenten). Eine Spalte in der Tabellen unterscheidet den Typ. Und bei einem Typ müssen halt zwei Felder mehr ausgefüllt werden als beim anderen....
Hallo,
mAn besteht die einzig zuverlässige Kontrollmöglichkeit im Formular-Ereignis "Vor (bzw. Nach-) Aktualisierung".
Der Einsatz von Gültigkeitsregeln und die Nutzung sonstiger (Steuerelement-) Ereignisse zwecks Kontrolle der Dateneingabe bereiten sowohl dem Anwender als auch dem Entwickler nur unnötigen Stress.
Ja, das sehe ich mittlerweile auch so... Ok besten Dank Euch :)
Private Sub txtAdresse_BeforeUpdate(Cancel As Integer)
If IsNull(Me!txtAdresse) Then
MsgBox "Eingabe erforderlich", vbInformation, "Bitte Feld ausfüllen."
Cancel = True
End If
End Sub
Ich hab das so gemacht, aber irgendwo ist da ein Fehler drin, sieht den jemand? Eben gings noch und jetzt garnicht mehr...
Hi,
ZitatEben gings noch
wie stellt sich dieses "Nicht Gehen" dar? Ist der Inhalt des Textfeldes evtl. nicht NULL sondern einfach nur leer ("")?
Zitat von: MaggieMay am Januar 18, 2016, 11:29:15
Hi,
ZitatEben gings noch
wie stellt sich dieses "Nicht Gehen" dar? Ist der Inhalt des Textfeldes evtl. nicht NULL sondern einfach nur leer ("")?
Die Meldung kommt nicht mehr wenn das Feld leer ist...
hab auch schon
If (Me!txtAdresse) = "" Then .... versucht, ohne Erfolg
Weiß nicht wieso das schonmal ging und jetzt nichtmehr. ???
Hallo,
versuch mal:
If Len(nz(Me!txtAdresse,"")) = 0 Then
Zitat von: DF6GL am Januar 18, 2016, 12:03:00
Hallo,
versuch mal:
If Len(nz(Me!txtAdresse,"")) = 0 Then
Da bekomm ich die Meldung sowohl für den Fall, dass das Feld leer ist, als auch wenn etwas drin steht!!
Die Ereignisprozedur kommt nur bei Änderung des Textfeldes zum Einsatz, wenn nichts drinsteht und nichts eingetragen wird, passiert auch nichts.
Meinst du das vielleicht?
BTW:
ZitatDa bekomm ich die Meldung sowohl für den Fall, dass das Feld leer ist, als auch wenn etwas drin steht!!
Das glaube ich nicht. ???
das eine Problem ist behoben, hatte mich wo bei der Bezeichnung geirrt, aber jetzt passiert wieder garnichts (die Meldung erscheint nicht). ich bin am verzweifeln, danke für deine/eure Geduld!!
Private Sub Form_Open(Cancel As Integer)
DoCmd.Maximize
End Sub
Private Sub txtKunde_BeforeUpdate(Cancel As Integer)
If Len(Nz(Me!txtKunde, "")) = 0 Then
MsgBox "fehlende Eingabe", vbInformation, "Bitte füllen Sie alle Felder aus"
Cancel = True
End If
End Sub
Hallo,
Mal abgesehen davon, dass Mal wieder nur "geht nicht" gepostet wird (wann soll die Meldung denn erscheinen?),
würde ich die Prüfung in das FORM_BeforeUpdate-Ereignis verlagern, und dort alle Pflichtfelder der Reihe nach überprüfen.
1. weil ich da den Code nur einmal brauche,
2. den Anwender nicht mit ständigen MsgBoxen nerve, und
3. ich dort eben nur eine Msg soweit aufbereiten kann, dass sie dem Anwender gleich zeigt welche Felder beanstandet werden.
gruss ekkehard
Zitat von: Beaker s.a. am Januar 18, 2016, 15:07:15
Hallo,
Mal abgesehen davon, dass Mal wieder nur "geht nicht" gepostet wird (wann soll die Meldung denn erscheinen?),
würde ich die Prüfung in das FORM_BeforeUpdate-Ereignis verlagern, und dort alle Pflichtfelder der Reihe nach überprüfen.
1. weil ich da den Code nur einmal brauche,
2. den Anwender nicht mit ständigen MsgBoxen nerve, und
3. ich dort eben nur eine Msg soweit aufbereiten kann, dass sie dem Anwender gleich zeigt welche Felder beanstandet werden.
gruss ekkehard
Hi ekkehard,
nungut, es soll ja eine Fehlermeldung erscheinen wenn das Feld nicht ausgefüllt wird. Diese Meldung erscheint nicht, ich kann das Feld unausgefüllt überspringen. Ich verstehe einfach nicht warum es nicht funktioniert...
Eine übergeordnete Fehlermeldung wäre natürlich wünschenswert, ich weiß allerdings nicht wie ich das per VBA formulieren soll. Bin leider nicht vom Fach, ich bin gerade am Lernen und viel lesen. Aber klappen tut es noch nicht so wirlich ;)
Wie könnte ich denn die Textfelder zusammen abfragen?
viele Grüße
Julian
Hallo,
Zitatich kann das Feld unausgefüllt überspringen. Ich verstehe einfach nicht warum es nicht funktioniert...
ganz einfach: das Ereignis zum Starten der Ereignisprozedur wird nicht ausgelöst, wenn das Feld übersprungen wird...
MaggieMay hat's doch erklärt:
ZitatDie Ereignisprozedur kommt nur bei Änderung des Textfeldes zum Einsatz, ..
Insofern ist das Form-Ereignis "Vor Aktualisierung" für solche Plausibilitäts-Prüfungen am Besten geeignet... und das wiederum hat Ekkehard erklärt..
Sub Form_BeforeUpdate (Cancel as Integer)
If Isnull(Me!Textfeld1) Then
Msgbox "Bitte Textfeld1 ausfüllen"
Cancel =true
Me!Textfeld1.Setfocus
End If
...
If <Weitere Felder zur Prüfung>
.
.
End If
End Sub
Hallo,
im Anhang eine kleine Beispieldb für Pflichtfelder.
Hier kann noch nicht mal die DB beendet werden, wenn nicht alle Pflichtfelder ausgefüllt sind.
Zitat von: DF6GL am Januar 18, 2016, 15:58:31
Insofern ist das Form-Ereignis "Vor Aktualisierung" für solche Plausibilitäts-Prüfungen am Besten geeignet... und das wiederum hat Ekkehard erklärt..
Hab ich so versucht, man kann trotzdem ein leeres Formular ausdrucken...
Die anderen Zeitpunkte machen für mich Sinn irgendwo, aber wann "springt" das
Form-Ereignis "Vor Aktualisierung" denn an?
Das Formular wird ja nicht aktualisiert oder gespeichert, sondern soll nur gedruckt werden.
Hallo,
handelt es sich um ein ungebundenes Formular? Dann treten solche Ereignisse auch nicht auf.
Als geeignetes Ereignis könnte z. B. das Klick-Ereignis einer Schaltfläche herhalten, über die das Form ausgedruckt wird.
Zitat von: DF6GL am Januar 20, 2016, 11:16:26
Hallo,
handelt es sich um ein ungebundenes Formular? Dann treten solche Ereignisse auch nicht auf.
Als geeignetes Ereignis könnte z. B. das Klick-Ereignis einer Schaltfläche herhalten, über die das Form ausgedruckt wird.
Es ist ein ungebundenes Formular, also hat das deswegen nicht funktioniert. Ich nähere mich Stück für Stück, daher danke für die Hilfe und Geduld nochmal!
Ich habe nun den Druck-Button mit der Überprüfung verknüpft, das funktioniert auch! Das eigentliche Drucken wurde durch ein "eingebettetes Makro" angestoßen, was ich ja nun manuell hinter die Ereignisprozedur packen muss.
der Befehl ist hier ja
DoCmd.RunCommand acCmdPrintMit welchem Ausdruck verknüpfe ich nun beides?
Überprüfung positiv (alle Felder ausgedruckt) = Druckmenü startet
Überprüfung negativ (ein/ mehrere Felder fehlen) =Druckmenü startet nicht
Hi,
wie sieht denn deine Prüfung aus? Gibte es da so etwas wie "If - Then - Else"??
Zitat von: MaggieMay am Januar 20, 2016, 12:17:36
Hi,
wie sieht denn deine Prüfung aus? Gibte es da so etwas wie "If - Then - Else"??
Nee, im Moment klappert das auch jedes Feld einzeln ab und wirft pro Feld eine Fehlermeldung aus.
(aber es funktioniert schonmal :) )
Private Sub bDrucken_Click()
If Len(Nz(Me!txtKunde, "")) = 0 Then
MsgBox "Kunde fehlt", vbInformation, "Bitte füllen Sie alle Felder aus"
Cancel = True
End If
If Len(Nz(Me!txtAdresse, "")) = 0 Then
MsgBox "Adresse fehlt", vbInformation, "Bitte füllen Sie alle Felder aus"
Cancel = True
End If
End Sub
Hallo,
Was erwartest Du von "Cancel = True" ?
Die Klick-Ereignisprozedur hat kein solches Argument und die Codezeile läuft ins Leere, zumal Du vermutlich "Option Explicit" nicht in den , bzw. allen Modulköpfen eingetragen hast. Das solltest Du dringend nachholen.
Schreib statt "Cancel = true" "Exit Sub" ....
Es fehlt aber auch noch die Druck-Funktion(alität).
Private Sub bDrucken_Click()
If Len(Nz(Me!txtKunde, "")) = 0 Then
MsgBox "Kunde fehlt", vbInformation, "Bitte füllen Sie alle Felder aus"
Exit Sub
ElseIf Len(Nz(Me!txtAdresse, "")) = 0 Then
MsgBox "Adresse fehlt", vbInformation, "Bitte füllen Sie alle Felder aus"
Exit Sub
ElseIf Len(Nz(Me!txtProdukt, "")) = 0 Then
MsgBox "Produkt fehlt", vbInformation, "Bitte füllen Sie alle Felder aus"
Exit Sub
Else
DoCmd.RunCommand acCmdPrint
End If
End Sub
läuft sauber durch! Danke für die Unterstützung! :)
Edit: Wenn ich den Druckdialog abbreche, kommt eine Laufzeitfehler als Fehlermeldung, sollte nicht weiter schlimm sein, aber kann man das umgehen?
Jetzt muss nurnoch der Druck zweimal auf verschiediene Drucker ausgegeben werden, da muss ich mich nochmal in die Quellen einlesen
Auf dem Formular sind eine oder mehrere Gruppen an Kontrollkästchen.
Gibt es eine Bedingung (ähnlich der oben) die den Nutzer dazu zwingt, ein odere mehrere Kästchen dieser Gruppe zu markieren?
Zumal diese "Gruppen" erstmal definiert werden müssten.
Hallo,
wenn mit "Gruppen an Kontrollkästchen" Optionsgruppen-Steuerelemente , in/auf denen Kontrollkästchen sitzen, gemeint sind, dann hat jedes dieser OG-Steuerelemente einen Optionswert, den es auszuwerten gilt....
Um die Fehlermeldung, die beim Abbruch des Druckvorgangs erscheint, zu unterdrücken, kann einfach ein "On Error Goto Next" vor der Druck-Codezeile eingefügt werden. Allerding wäre ein vernünftiger Errorhandler-Code besser angebracht, insbesondere, wenn es weiteren Code nach dem Druck-Befehl geben sollte.
Zitat von: DF6GL am Januar 20, 2016, 15:12:00
Hallo,
wenn mit "Gruppen an Kontrollkästchen" Optionsgruppen-Steuerelemente , in/auf denen Kontrollkästchen sitzen, gemeint sind, dann hat jedes dieser OG-Steuerelemente einen Optionswert, den es auszuwerten gilt....
Um die Fehlermeldung, die beim Abbruch des Druckvorgangs erscheint, zu unterdrücken, kann einfach ein "On Error Goto Next" vor der Druck-Codezeile eingefügt werden. Allerding wäre ein vernünftiger Errorhandler-Code besser angebracht, insbesondere, wenn es weiteren Code nach dem Druck-Befehl geben sollte.
Ich hab eine Optionsgruppe angelegt, kann diese auch auslesen, aber es muss eine Mehrfachauswahl möglich sein. Das geht mit den Optionsgruppen meines Wissens nach nicht...
Hallo,
in der Tat.. Dann nimm ein Listenfeld
Hallo Julle,
Was ich meinte ist:
Private Sub bDrucken_Click()
Dim strMsg As String
Dim blnFehler As Boolean
strMsg = "Folgende Fehler müssen ausgefüllt werden:"
If Len(Nz(Me!txtKunde, "")) = 0 Then
blnFehler = True
strMsg = strMsg & vbcrlf & "Kunde"
ElseIf Len(Nz(Me!txtAdresse, "")) = 0 Then
blnFehler = True
strMsg = strMsg & vbcrlf & "Adresse"
ElseIf Len(Nz(Me!txtProdukt, "")) = 0 Then
blnFehler = True
strMsg = strMsg & vbcrlf & "Produkt"
End If
If blnFehler Then
MsgBox strMsg, vbInformation, "Bitte füllen Sie alle Felder aus!"
Else
DoCmd.RunCommand acCmdPrint
End If
End Sub
Wie gesagt eine MsgBox für alles.
hth
gruss ekkehard
Zitat von: DF6GL am Januar 20, 2016, 16:04:07
Hallo,
in der Tat.. Dann nimm ein Listenfeld
Würde das gern aus Formatierungsgründen ohne Listenfeld umsetzen.
Jedes Kontrollkästchen gibt ja einen Wert aus, ich nehme an 0 für "nicht ausgewählt" und 1 für "ausgewählt".
Wenn man nun alle Werte addiert und das einen Wert ungleich 0 (bzw x>0) ergibt, wäre die Bedingung, dass mindestens eins ausgewählt ist, erfüllt.
Frage ist nun die Umsetzung. Ich müsste ja eine Prüfvariable als String einführen (als Summe aller Werte der Kontrollkästchen) und überprüfen.
Wie erstellt man so eine Summe?
Zitat von: Beaker s.a. am Januar 20, 2016, 21:29:20
Wie gesagt eine MsgBox für alles.
hth
gruss ekkehard
Danke für die Option, aber im Moment kommt ja auch nur ein Hinweis. Und in dem Hinweis von deinem Code steht in der Meldung auch nur das erste nicht ausgefüllte Feld und nicht alle fehlenden. Obwohls natürlich ein kompakterer Code ist :)
Hallo,
ausgehend von
ZitatAuf dem Formular sind eine oder mehrere Gruppen an Kontrollkästchen.
Gibt es eine Bedingung (ähnlich der oben) die den Nutzer dazu zwingt, ein odere mehrere Kästchen dieser Gruppe zu markieren?
Zumal diese "Gruppen" erstmal definiert werden müssten.
kannst Du die Überprüfung genau so machen wie bei den Textfeldern auch, also jedes KK einzeln für sich testen und entspr. reagieren.
Natürlich könnten die Einzelprüfungen auch innerhalb einer Schleife erfolgen, die entweder über alle KK läuft oder innerhalb mehrerer Schleifen, die durch jede Gruppe von KK laufen.
Die "Gruppen" könnten so gebildet werden, als dass für die Benamsung der KK eine fortlaufende Ziffer eingesetzt wird, die zur "Berechnung" des akt. KK herangezogen wird.
Zitat von: DF6GL am Januar 21, 2016, 12:16:03
kannst Du die Überprüfung genau so machen wie bei den Textfeldern auch, also jedes KK einzeln für sich testen und entspr. reagieren.
Natürlich könnten die Einzelprüfungen auch innerhalb einer Schleife erfolgen, die entweder über alle KK läuft oder innerhalb mehrerer Schleifen, die durch jede Gruppe von KK laufen.
Die "Gruppen" könnten so gebildet werden, als dass für die Benamsung der KK eine fortlaufende Ziffer eingesetzt wird, die zur "Berechnung" des akt. KK herangezogen wird.
hab das gelöst mit:
Dim intSumme As Integer
intSumme = Me!ichk1 + Me!chk2 + Me!chk3 + Me!chk4 + Me!chk5
ElseIf intSumme = 0 Then
MsgBox "Bitte mindestens eine Kontrollkästchen anhaken!"
Exit Sub
Hallo,
das ist ok, wenn eine solche Plausi-Prüfung dem Anspruch genügt...
Zitat von: DF6GL am Januar 21, 2016, 16:38:06
Hallo,
das ist ok, wenn eine solche Plausi-Prüfung dem Anspruch genügt...
Es tut seinen Dienst. Aber rein interessehalber, was wäre an anderen Möglichkeiten qualitativ besser?
Hallo,
@Julle
Hast Du Dir das Beispiel hier in diesem Thema (#19) nicht angesehen ?
Hallo,
qualitativ?
Das heißt, den Ansprüchen (der Logik) genügen.
Und das heißt wiederum, Du(!) musst die Ansprüche (den Algorithmus) der Plausibilität definieren.
Deine Prüfung auf 0-Summe erfüllt nur den Anspruch, mindestens einen Haken setzen zu müssen. Bestimme KK, bzw. "Gruppen" sind so nicht bestimmbar. ...
Zitat von: DF6GL am Januar 21, 2016, 17:06:44
Hallo,
qualitativ?
Das heißt, den Ansprüchen (der Logik) genügen.
Und das heißt wiederum, Du(!) musst die Ansprüche (den Algorithmus) der Plausibilität definieren.
Deine Prüfung auf 0-Summe erfüllt nur den Anspruch, mindestens einen Haken setzen zu müssen. Bestimme KK, bzw. "Gruppen" sind so nicht bestimmbar. ...
Nunja, bestimmte Gruppen hab ich nun durch unterschiedliche Summen-Variablen gekennzeichnet. Von daher alles paletti!
Zitat von: MzKlMu am Januar 21, 2016, 17:05:22
Hallo,
@Julle
Hast Du Dir das Beispiel hier in diesem Thema (#19) nicht angesehen ?
Doch hab ich, vielen Dank dafür, war hilfreich fürs Verständnis!
Zitat von: MzKlMu am Januar 21, 2016, 17:05:22
Hallo,
@Julle
Hast Du Dir das Beispiel hier in diesem Thema (#19) nicht angesehen ?
Ich habe vom Beispiel die Funktion nachgebaut, dass das Schließen der Formulare nur über einen Button funktioniert.
Private Sub Beenden_Click()
bolSchliessenErlaubt = True
DoCmd.Close acForm, "frmStart"
DoCmd.Quit
End Sub
Private Sub Form_Unload(Cancel As Integer)
If bolSchliessenErlaubt = False Then
MsgBox "Formular bitte per Button verlassen" & vbCrLf & vbCrLf & "Die Anwendung kann nur über den Button <Beenden> geschlossen werden"
Cancel = True
End If
End Sub
passendes Modul dazu
Option Compare Database
Option Explicit
Public bolSchliessenErlaubt As Boolean
Ich hab ein Startformular welches weitere Formulare anwählt.
Problem ist nun, dass wenn ich das von "frmStart" ausgewählte Formular schließe (geht nur über den Button) komme ich ja wieder auf "frmStart" zurück, in diesem Moment kann ich das Formular "frmStart" aber wieder normal schließen, also der Code greift nicht mehr.
Wisst ihr wo da ein Fehler liegen könnte?
Hallo,
wenn du eine einzige globale Variable zur Steuerung aller Formulare einsetzen willst, so musst du sie bspw. beim Laden eines Formulars auch immer wieder auf FALSE setzen.
Zitat von: MaggieMay am Februar 05, 2016, 11:23:04
Hallo,
wenn du eine einzige globale Variable zur Steuerung aller Formulare einsetzen willst, so musst du sie bspw. beim Laden eines Formulars auch immer wieder auf FALSE setzen.
verstehe nicht ganz wie so etwas aussehen würde! außerdem bleibt das Formular "frmStart" ja die ganze Zeit geöffnet!
Mit dem frmStart hat es ja nichts zu tun, wenn du das Speichern in den Bearbeitungsformularen kontrollieren willst.
Was hält dich davon ab, es einfach mal auszuprobieren?
Aktiviere das Ereignis "Beim Laden" und schreibe die folgende Codezeile in die Ereignisprozedur:
bolSchliessenErlaubt = False
Hallo,
Wenn jedes einzelne Form für sich selber "geprüft" werden soll, dann gehört die "bolSchliessenErlaubt"-Variable in die einzelnen Formularklassenmodule und nicht in ein Standardmodul...
Zitat von: MaggieMay am Februar 05, 2016, 14:03:12
Mit dem frmStart hat es ja nichts zu tun, wenn du das Speichern in den Bearbeitungsformularen kontrollieren willst.
Was hält dich davon ab, es einfach mal auszuprobieren?
Aktiviere das Ereignis "Beim Laden" und schreibe die folgende Codezeile in die Ereignisprozedur:
bolSchliessenErlaubt = False
Die Überprüfungen in den einzelnen Formularen funktioniert tadellos (dort ist jeweils die bolSchliessenErlaubt - Variable hinterlegt), wenn ich das nun geschlossen hab und auf das Startformular zurückkehre (das ja immernoch geöffnet ist) dann kann ich das ganz einfach schließen, auch mit dem Code beim laden.
Zitatdort ist jeweils die bolSchliessenErlaubt - Variable hinterlegt
Das hattest du bis jetzt nicht erwähnt, daher dachte ich es gäbe nur eine globale Variable, so wie du es in #40 gezeigt hattest.
Warum willst du denn das Schließen des Startformulars verhindern, werden dort ebenfalls Daten eingegeben?
Zitatauch mit dem Code beim laden.
Was willst du damit sagen? Beim Laden wird ja nicht das Schließen verhindert.
Nachtrag:
Vielleicht habe ich dich doch noch richtig verstanden.
Zitat von: julle am Februar 05, 2016, 10:13:14
komme ich ja wieder auf "frmStart" zurück, in diesem Moment kann ich das Formular "frmStart" aber wieder normal schließen, also der Code greift nicht mehr.
Der Code "greift" schon, nur die Variable steht ja durch das letzte Schließen auf True.
Das kannst du folgendermaßen lösen:
Private Sub Form_Unload(Cancel As Integer)
If bolSchliessenErlaubt = False Then
MsgBox "Formular bitte per Button verlassen" & vbCrLf & vbCrLf & _
"Die Anwendung kann nur über den Button <Beenden> geschlossen werden"
Cancel = True
End If
bolSchliessenErlaubt = False
End SubIm Load-Ereignis kannst du den Befehl dann wieder entfernen.
Zitat von: MaggieMay am Februar 05, 2016, 15:59:02
Nachtrag:
Vielleicht habe ich dich doch noch richtig verstanden.
Hast du, vielen Dank! :)
So funktioniert das, macht auch vollkommen Sinn!
viele Grüße!
"ordentlich" programmiert sähe das dann so aus:
Private Sub Form_Unload(Cancel As Integer)
If bolSchliessenErlaubt = False Then
MsgBox "Formular bitte per Button verlassen" & vbCrLf & vbCrLf & _
"Die Anwendung kann nur über den Button <Beenden> geschlossen werden"
Cancel = True
Else
bolSchliessenErlaubt = False
End If
End Sub