Hallo Gemeinde, :)
ich brauche für dieses, warscheinlich einfache Problem mal eure Hilfe.
Also ich möchte in einem FRM über einen Speicherbutton einen Datensatz speichern.
Über fncPruefen soll geprüft werden ob einige Felder gefüllt werden.
Hier im FRM habe ich jetzt eine Auswahlmöglichkeit bei der Zeiteingabe mit eingebaut.
Also entweder Me!optEintaegig und Me!txtBerStdEin oder Me!optMehrtaegig und Me!txtMehrtaegigBerechnet haben Werte.
Die andere Beiden Felder werden bei der Auswahl Ein- oder Mehrtägig deaktiviert.
Wenn ich die Zeile If Not IsNull(Me!optEintaegig) And Not IsNull(Me!txtBerStdEin) einzeln ohne oder (wie unten) verwende funktioniert es.
Hoffe das könnt ihr jetzt verstehen und könnt mir helfen.
Gruß Danny
If (Not IsNull(Me!optEintaegig) And Not IsNull(Me!txtBerStdEin)) Or (Not IsNull(Me!optMehrtaegig) And Not IsNull(Me!txtMehrtaegigBerechnet))
Then strFehlerText = strFehlerText & intFehlerzahl & ". Zeit fehlt oder ist ungültig" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End If
Hallo,
was ist nun die Frage?
Das If-Statement sollte so aussehen:
If (Not IsNull(Me!optEintaegig) And Not IsNull(Me!txtBerStdEin)) Or (Not IsNull(Me!optMehrtaegig) And Not IsNull(Me!txtMehrtaegigBerechnet)) Then
strFehlerText = strFehlerText & intFehlerzahl & ". Zeit fehlt oder ist ungültig" & vbCrLf
.
.
End If
Evtl. müssen die beiden And-Ausdrücke separat "abgefragt" werden.
Hallo und danke für die Antwort. Aber es ist doch immer nur eine Doppelkombi möglich!
Wenn ich die einzeln abfrage dann gibt er mir ja den Fehler das die andere Kombi nicht erfüllt ist.
Oder liege ich da falsch?
Hallo,
habe von "beiden And-Ausdrücken" gesprochen, nicht von einzelnen If-Bedingungen...
Zitat von: Brallu am November 15, 2019, 18:33:39
Also entweder Me!optEintaegig und Me!txtBerStdEin oder Me!optMehrtaegig und Me!txtMehrtaegigBerechnet haben Werte.
opt... klingt entweder nach Optiongroup oder nach OptionButton. - Bei diesen Steuerelementen ist eine Prüfung auf NULL nicht so zielführend. - Ich würde einen Standardwert für die Optiongroup vergeben und dann explizit auf die jeweiligen Werte der einzelnen Optionen prüfen.
Hallo und danke für eure Antworten,
leider bekomme ich es nicht hin :-[
Findet einer meinen Fehler?
-1 (optEintaegig) und 0 (optMehrtaegig) sind die Standartwerte. (AuswahlEinOderMehr) ist die Optionsgruppe.
Hier der letzte Code:
'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 Stunden berechnet wurden leer
If (Me!AuswahlEinOderMehr) = "-1" And Not IsNull(Me!txtBerStdEin) Or _
(Me!AuswahlEinOderMehr) = "0" And Not IsNull(Me!txtMehrtaegigBerechnet) Then
strFehlerText = strFehlerText & intFehlerzahl & ". Zeit wurde nicht berechnent" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End If
If fncPruefen = False Then
If intFehlerzahl = 2 Then strFehlerText = Mid(strFehlerText, 1) '10 = Anzahl der Prüfpunkte
Select Case MsgBox("Es gibt noch " & intFehlerzahl - 1 & " Fehler" & vbCrLf & vbCrLf & strFehlerText _
& vbCrLf & vbCrLf & "mit OK zurück, Abbrechen verwirft den begonnenen Datensatz", vbOKCancel, "Achtung!")
Case vbCancel
Me.Undo
End Select
End If
End Function
Private Sub cmdSpeichern_Click()
If fncPruefen = True Then
DoCmd.RunCommand acCmdSaveRecord
Me.Requery
End If
End Sub
Hallo,
Zahlen werden mit Zahlen verglichen, nicht mit Text:
ZitatIf (Me!AuswahlEinOderMehr) = -1 And Not IsNull(Me!txtBerStdEin) Or _
(Me!AuswahlEinOderMehr) = 0 And Not IsNull(Me!txtMehrtaegigBerechnet) Then
Zitat von: Brallu am November 16, 2019, 15:00:36
leider bekomme ich es nicht hin :-[
Findet einer meinen Fehler?
Wie äußert sich dein Fehler denn?
Ich habe deine Erläuterungen nicht bis ins Detail gelesen, aber mir erscheint das NOT in den Bedingungen falsch zu sein.
If (Me!AuswahlEinOderMehr.Value = Me.optEintaegig.OptionValue And IsNull(Me!txtBerStdEin)) _
Or _
(Me!AuswahlEinOderMehr.Value = Me.optMehrtaegig.OptionValue And IsNull(Me!txtMehrtaegigBerechnet)) _
Then
strFehlerText = strFehlerText & intFehlerzahl & ". Zeit wurde nicht berechnent" & vbCrLf
intFehlerzahl = intFehlerzahl + 1
fncPruefen = False
End IfAuf die OptionValue-Eigenschaften verweise ich nur, weil es den Code lesbarer macht und du die Werte (0 / -1) nur noch an einer Stelle pflegen musst. Einen funktionalen Unterschied macht das nicht.
Deine Logik mit
strFehlerText und
intFehlerzahl ist für mich unklar.
Danke Phil,
das war die Lösung!!!! :)
ZitatDeine Logik mit strFehlerText und intFehlerzahl ist für mich unklar.
Da jetzt noch mehr Punkte geprüft werden wird dem Benutzer dann beim Speichern-Klick eine Nachricht ausgegeben welche Punkte er noch ausfüllen muß.
Also nochmals Danke für eure Mühe und die schnelle Hilfe.