Hallo zusammen,
ich habe in einem Formular eine kleine Kontrolle "vor Aktualisierung" eingebaut.
D.h. wenn der Wert in dem Feld auf Aktiv gestellt wird, läuft eine Prüfroutine ab, ob bestimmte Felder befüllt wurden.
Soweit funktioniert das auch wie gewünscht.
Der Wert bleibt in dem Feld aber trotzdem auf Aktiv stehen.
Das ist ja eigentlich nicht Sinn und Zweck der Sache, wenn ich eine Prüfroutine "vor Aktualisierung" durchführe.
Anbei ein Teil des Codes. Was ist daran falsch?
Private Sub txt_Kombi_Status_BeforeUpdate(Cancel As Integer)
Dim chk As Boolean
chk = False
msg_text = "Folgende Felder müssen noch befüllt werden, um den Vorgang abzuschließen: "
If txt_Kombi_Status = "1. Aktiv" Then
SQL = "select a.txt_in_Diamos_gebucht_als, a.txt_Stückelieferung_über_CBL from tbl_Investments a " & _
"inner join tbl_Kombi_Inv_in_Fonds b on a.txt_ISIN_Investment = b.txt_ISIN_Investment " & _
"where b.ID_Kombi_ID = " & Forms!fml_Investments_Dokumente_VEP.Form.ID_Kombi_ID
If IsNull(CurrentDb.OpenRecordset(SQL)(0)) = True Then
msg_text = msg_text & vbCr & vbCr & "- " & "'in Diamos gebucht als' in Checkliste Stammdaten"
chk = True
End If
If chk = True Then
MsgBox msg_text, vbInformation, "Es wurden noch nicht alle Felder befüllt"
Cancel = True
End If
End If
End Sub
Bisher bin ich davon ausgegangen, dass mit dem Befehl
Cancel = True
der Vorgang abgebrochen wird? Tut es aber nicht.
Hast du den Wert von "chk" an der entscheidenden Stelle überprüft?
ja, die MessageBox poppt an der Stelle wie gewünscht auf.
If chk = True Then
MsgBox msg_text, vbInformation, "Es wurden noch nicht alle Felder befüllt"
Cancel = True
End If
Das Feld mit dem Status kann ich anschließend aber nur über die ESC-Taste verlassen. Sonst poppt der Fehler ununterbrochen auf.
Zitat von: dobby110 am August 09, 2022, 12:10:02Der Wert bleibt in dem Feld aber trotzdem auf Aktiv stehen.
Das ist ja eigentlich nicht Sinn und Zweck der Sache, wenn ich eine Prüfroutine "vor Aktualisierung" durchführe.
Anbei ein Teil des Codes. Was ist daran falsch?
Soweit ich sehe nichts. Ich denke, du hast da eine falsche Erwartung.
Wenn in BeforeUpdate Cancel=True gesetzt wird, wird das Feld nicht aktualisiert und behält weiterhin den Fokus. Sonst passiert nichts. Was soll auch sonst automatisch passieren? Das musst du schon explizit festlegen.
ZitatDas musst du schon explizit festlegen.
Jau, das war der entscheidende Hinweis
If chk = True Then
MsgBox msg_text, vbInformation, "Es wurden noch nicht alle Felder befüllt"
Cancel = True
Me.txt_Kombi_Status.Undo
End If
B.t.w., warum hat der Status keine ID?
Super ! Vielen Dank ! Genau das war die Lösung.
Da war meine Erwartungshaltung tatsächlich eine andere. ;-)
Der Status hat keine ID. Hierfür habe ich "nur" ein Nachschlagefeld eingefügt.
Es soll lediglich eine Unterscheidung zwischen "in Prüfung", "Aktiv" und "Inaktiv" geben.
Das erfüllt die Anforderungen.
Welchen Mehrwert hätte eine ID?