Hallo zuusammen,
ich möchte über ein Formular Felder aktualisieren. Unter Anderem auch ein Ja/Nein Feld mithilfe eines Optionsfeldes.
Dabei möchte ich beim Fokuserhalt des Feldes eine doppelte Sicherheitsabfrage haben:
Als erstes: Achtung, die Stornierung kann nicht rückgängig gemacht werden!. Wenn dann auf "Abbrechen" gedrückt wird, möchte das Feld nicht aktualisiewren und den Cursor auf ein anderes Feld im Formular setzen. Das klappt mit dem Code unten soweit.
Private Sub Option45_GotFocus()
If MsgBox("Achtung: Die Stornierung kann nicht rückgängig gemacht werden!", vbExclamation + vbOKCancel, "Bestätigung erforderlich") = vbCancel Then
Cancel = True
Me!Info.SetFocus
End If
Refresh
End Sub
Wenn auf OK gedrückt wird, möchte ich eine Weitere Sicherheitsabfrage einbauen "Sind Sie wirklich sicher?".
Wenn da auf OK gedrückt wird, soll die Feldänderung erfolgen. Wenn da auf Abbruch gedrückt wird, soll die Anderung nicht erfolgen und der Cursor auf ein anderes Feld gesetzt werden.
Leider weiß ich nicht, wie ich die 2. Abrage richtig einbinde. Kann mir hier jemand helfen?
Danke und Gruß
Christian
Hallo,
wozu willst Du hier ein extra Optionsfeld?
Und warum soll der Cursor bei Abruch in ein anderes Feld ?
Du kannst doch das Feld "Storno" selbst verwenden und zwar im Ereignis "Vor Aktualisierung".
Cancel = True ist hier völlig sinnlos.
Den Parameter Cancel kann man nur in Ereignissen verwenden in den Cancel auch im Prozedurkopf deklariert ist.
PS:
Du solltest in jedem Modulkopf
Option Explicitsetzen, dann führen undeklarierte Variablen (wie z.B. Cancel) zu einem Fehler, was sinnvoll ist.
PS2:
Aus Deinem anderen Thema:
Zitat von: undefinedich werde meine Datenbank entsprechend ändern,
Was ist daraus geworden, hast Du geändert ?
Wenn ja, zeige das neue Beziehungsbild.
Warum antwortest Du nicht mehr im anderen Thema auf den letzten beitrag von mir ?
Hallo,
das lässt sich mit einer Msgbox in der Ereignisprozedur "Vor Aktualisierung" des Optionsfeldes bewerkstelligen
antwort = MsgBox("Wirklich ändern?", vbYesNoCancel)
select case antwort
case Is = vbYes
......
case Is = vbYNo
......
case Is = vbcancel
......
end select
Zitat von: andyfau am Januar 07, 2022, 15:06:43Hallo,
das lässt sich mit einer Msgbox in der Ereignisprozedur "Vor Aktualisierung" des Optionsfeldes bewerkstelligen
antwort = MsgBox("Wirklich ändern?", vbYesNoCancel)
select case antwort
case Is = vbYes
......
case Is = vbYNo
......
case Is = vbcancel
......
end select
Vielen Dank. Und wie genau bringe ich diesen Code jetzt unter, dass ich bei Ja 2 Sicherheitsabfragen habe?
Danke und Gruß
Christian
Hallo,
was ist mit meinen Fragen/Hinweisen in #1 ?
Im einfachsten Fall geht das einfach direkt mit dem Feld Storno. Ein extra Optionsfeld braucht man da nicht.
Private Sub Storno_BeforeUpdate(Cancel As Integer)
If Me.Storno = False Then
If MsgBox("Kann nicht geändert werden, trotzdem ändern ?", vbYesNo) = vbNo Then
Cancel = True
Else
If MsgBox("Wirlich Ändern ?", vbYesNo) = vbNo Then
Cancel = True
End If
End If
End If
End Sub
Klaus hat natürlich Recht.....
Aber mal was Grundsätzliches zum Thema Storno. Sauberer wäre es allemal bei Storno einen neuen Stornodatensatz zu erzeugen, der den Ursprungsdatensatz neutralisiert und nicht einfach nur ein Stornokennzeichen zu setzen. (Beispiel: Ein Rechnungsbeleg wird nicht gelöscht oder mit Storno gekennzeichnet, sondern dazu gibt es dann einen passenden Gutschriftbeleg)
Hallo Klaus,
Ich scheine mich da falsch ausgedrückt zu haben. Ich gehe schon direkt auf das Feld "Storno" Das ist bei mir aber als Optionsfeld gewählt, da ich nicht Ja/Nein in einem Feld im Formular stehen haben möchte, sondern lieber einen Optionspunkt, der entweder ausgefüllt oder leer ist.
Vielen Dank für den Code!
Gruß
Christian
Zitat von: andyfau am Januar 07, 2022, 17:12:06Klaus hat natürlich Recht.....
Danke für den Hinweis. Die Stornoprozedur ist dafür gedacht, wenn der Eingang selber falsch gemacht wird und aus möglichen Gründen nicht geändert werden kann. Eigentlich wollte ich den Datensatz dann einfach komplett löschen können, das möchte ich jedoch aus Gründen der Nachvollziebarkeit nicht. Es gint im Datensatz ein Bemerkungsfeld, in weiches der Grund des Stornos eingetragen werden muss. Der Vorschlag mit Gutschriftenprozedur oder ähnlichem sprengt den Rahmen meines Anwendungsfalls.
Dennoch vielen Dank und Gruß
Christian