Moin Gemeinde,
jetzt schon wieder ein Problem :-[
wie kann ich bei dem unten aufgeführtem Code verhindern das beim Button auch die Frage nach dem Speichern Ja / Nein kommt???
Hoffe das ist nicht so schwer aber ich komme nicht weiter :(
Gruß
Danny
Option Compare Database
Option Explicit
Private Sub Form_BeforeUpdate(Cancel As Integer)
'Immer wenn der Datensatz gespeichert werden soll egal wie wird gefragt was passieren soll Speichern Ja oder Nein
If Me.Dirty Then
If vbNo = MsgBox("Möchten Sie Speichern?", vbQuestion + vbYesNo, "Frage") Then 'vbNo = Nein Schaltfläche
Cancel = acDataErrContinue
Me.Undo
End If
End If
End Sub
_______________________________________________________________
'was kann ich hier einfügen das der Befehl oben aufgehoben ist und ich ohne Frage Speichern kann
Private Sub cmdPruefSpeichern_Click()
' Speichern eines neu eingegebenen oder eines bearbeiteten Auftrages
' mit Sicherheitsabfragen
If IsNull(PruefDatum) Then
MsgBox "Bitte geben Sie ein Datum ein!"
PruefDatum.SetFocus
Exit Sub
End If
If IsNull(pruefPrüfErgebnis_F_ID) Then
MsgBox "Bitte geben Sie ein Ergebnis ein!"
pruefPrüfErgebnis_F_ID.SetFocus
Exit Sub
End If
If IsNull(pruefPruef_F_ID) Then
MsgBox "Bitte geben Sie eine Endzeit ein!"
pruefPruef_F_ID.SetFocus
Exit Sub
End If
DoCmd.RunCommand acCmdSaveRecord
cmdPruefSpeichern.Requery
End Sub
Hallo Danny,
Gar nicht, - BeforeUpdate wird immer gefeuert, wenn du einen DS speichern
willst. Das ist ja der Sinn dieses Events.
Du könntest beim Button eine formularweite Variable setzen, und diese
BeforeUpdate auslesen.
If blnButton Then
'dein jetziger Code
End If
ZitatcmdPruefSpeichern.Requery
Bekommst du da keinen LZ-Fehler? Eine Schaltfläche stellt IMO keine
Requery-Methode zur Vefügung.
gruss ekkehard
Einige Bemerkungen:
- Das Event Form_BeforeUpdate ist umfassender als Dein Commandbutton-Klick. Das wirkt auch, wenn das Formular geschlossen wird, ein Datensatz- oder Formularwechsel erfolgt usw. Daher gehört eine Prüfung auf Vollständigkeit von Pflichtangaben dort hinein, der Commandbutton ist auf das Wohlwollen des Users angewiesen und etwas hilflos.
- Rückfragen wie "Wollen Sie wirklich speichern" sind Kinderkram, also für ahnungslose User und für Programmierneulinge, die etwas sehen wollen, das sich bewegt. Ein Poweruser, der richtig arbeitet, wird die laufenden Rückfragen und den verursachenden Programmierer verfluchen.
- Gleichlautend sollte man auch fehlende Pflichtwerte sammeln und dazu eine (in Worten eine) Meldung dazu herausgeben. Wenn Dein User aus Versehen Deinen Commandbutton klickt und dann 5 ... 8 ... 15 Einzelmeldungen kommen, dass da etwas fehlt, wird sich seine Begeisterung auch in Grenzen halten.
Empfehlung:
- Entferne den Commandbutton. User kommen leicht ohne explizites Speichern klar.
- Verzichte aus das "Wollen Sie wirklich ...".
- Lege die Prüfung auf vollständige Pflichtfelder in das Form_BeforeUpdate.
Hallo,
im Anhang findest Du ein Beispiel für Pflichtfelder das auch weitgehend den Vorschlägen von Eberhard folgt.
Hier kann noch nicht mal die DB beendet werden, ohne Prüfung.
Ich danke euch allen!!! :)
Die Hinweise und die Beispielbank sind super und helfen mir hoffentlich das Problem in den Griff zubekommen.
Damit ihr seht warum ich einen Speicherbutton brauche/möchte könntet ihr euch die Beispiel_DB unter
http://www.access-o-mania.de/forum/index.php?topic=22362.msg129776#msg129776
3 Fragen weiter unten mal anschauen.
Wenn ich es schaffe baue ich da alles ein und setze es nochmal hier rein.
Gruß und nochmals Danke,
Danny
Hallo nochmal ich habe es leider nicht in den Griff bekommen :(
Habe die Gemeinsame Fehlerabfrage eingepflegt aber das Speichern verhindern wenn ich von UFO ins Hauptformular kilcke leider nicht.
Da ich VBA Anfänger bin stoße ich hier leider an meine Grenzen.
Der Button ist so genau das was ich brauche aber sonst soll nix gespeichert werden ohne frage ob gespeichert werden soll oder so.
Gibt es da eine Möglichkeit???
Habe die Demodatei nochmal angehängt!
Gruß
Danny
Option Compare Database
Option Explicit
'Speichert und kehrt zurück zur Auswahl
Private Sub cmdPruefSpeichern_Click()
If fncPruefen = True Then
DoCmd.RunCommand acCmdSaveRecord
End If
End Sub
'wird eventuell nicht mehr gebraucht
Private Sub Form_AfterUpdate()
Me.Parent.frmPruefPruefungUFO.Form.Requery 'aktualisiert FRM Prüfung damit neuer Datensatz möglich ist
Me.Parent.frmMatPruefUebersichtUFO.Form.Requery 'aktualisieren des UFOs damit änderungen in UFO2 angezeigt werden können
End Sub
'hier wird für alle Geprüft ob daten in den Feldern vorhanden
Public Function fncPruefen()
Dim strFehlerText As String, intFehlerzahl As Integer: intFehlerzahl = 1
fncPruefen = True
'prüfen ob Datum leer oder falsch
If IsNull(Me!PruefDatum) Or Not IsDate(Me!PruefDatum) Then
strFehlerText = strFehlerText & intFehlerzahl & ". Datum fehlt oder ist ungültig" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End If
'prüfen ob leer Optionsgruppe Prüfer
If IsNull(Me!Rahmen67) Then
strFehlerText = strFehlerText & intFehlerzahl & ". Es wurde keine Option gewählt" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End If
'prüfen ob leer Optionsgruppe Prüfergebnis
If IsNull(Me!Rahmen52) Then
strFehlerText = strFehlerText & intFehlerzahl & ". Es wurde keine Option gewählt" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End If
'prüfen ob Bemerkungen leer
If IsNull(Me!pruefBemerkungen) Then
strFehlerText = strFehlerText & intFehlerzahl & ". Es wurde keine Bemerkung angegeben" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End If
If fncPruefen = False Then
If intFehlerzahl = 2 Then strFehlerText = Mid(strFehlerText, 3)
Select Case MsgBox("Es gibt noch " & intFehlerzahl - 1 & " Fehler" & vbCrLf & vbCrLf & strFehlerText _
& vbCrLf & vbCrLf & "mit OK zurück, Abbrechen verwirft den begonnenen Datensatz", vbOKCancel)
Case vbCancel
Me.Undo
End Select
End If
End Function
Hab es über die Abfrage Speichern Ja Nein jetzt so wie ich es Brauche. :D
Also nochmals Danke für eure Hilfe!!