Hallo ich möchte eine Eingabe eines Datums über eine Fehlerroutine überprüfen! Das Ganze funktioniert jedoch noch nicht hundertprozentig. Manchmal steigt er doch aus und bringt einen Laufzeitfehler 13 "Typen unverträglich" . Und das obwohl ich diesen Fehler doch explizit abfange in der Routine:
Datummarke:
On Error GoTo Err_Report_Activate:
'Datumsabfrage wann die Anzahlung geleistet wurde
dt = InputBox("Wann wurde die Anzahlung geleistet? (z.B. 12.06.2017):")
'Anzahlungsdatum dem ungebundenen Berichtsfeld zuweisen
Me!txtDatum = dt
End If
Err_Report_Activate:
Select Case Err.Number
Case 13 'Typen unverträglich
MsgBox "Es wurde ein falsches Datumsformat eingegeben!", vbInformation, Fehlerhafte_Eingabe
GoTo Datummarke
End Select
MsgBox "Es wurde ein falsches Datumsformat eingegeben!", vbInformation, Fehlerhafte_Eingabe
GoTo Datummarke
End Sub
Wie gesagt: Ein paarmal geht es und er zeigt mir in der MsgBox den Fehler an und manchmal kommt dann Laufzeitfehler 13. Hier ist dann auch meine zweite Frage:
Wenn der Laufzeitfehler kommt könnte ein Anwender über "Debuggen" in den VBA Code. Das wollte ich unbedingt verhindern. Gibt es da (außer der Fehlerroutine) noch eine Möglichkeit dies zu unterdrücken??
Im Voraus vielen Dank!
Herbert
Über die Schönheit einer InputBox kann man geteilter Meinung sein.Private Sub MeineDatumseingabe()
Const Frage As String = "Wann wurde die Anzahlung geleistet?" & _
vbCrLf & "(z.B. 12.06.2017 oder auch 12.6 für das laufende Jahr):"
Dim Antwort As String
Do
Antwort = InputBox(Frage, "Datum eintragen")
If StrPtr(Antwort) = 0 Then Exit Sub 'Abbruch
Loop Until IsDate(Antwort)
'Me.txtDatum = cdate(Antwort)
'zum Testen
MsgBox CDate(Antwort)
End Sub
Hallo,
das Anzahlungsdatum ist doch bestimmt auch in einer Tabelle gespeichert.
Dann könnte man auf einem Formular das gewünschte Anzahlungsdatum über ein Kombifeld auswählen.
Das Kombi bezieht dann seine Datum aus der Tabelle mit dem Anzahlungsdatum.
Dann ist es ausgeschlossen dass man ein falsches Datum eingeben kann und der Code zum Prüfen entfällt ersatzlos.
Die Lösung von Lachtaube funktioniert einwandfrei. Ich habe den Code noch mal kommentiert
falls jemand Interesse daran hat:
Private Sub Befehl169_Click()
Const Frage As String = "Wann wurde die Anzahlung geleistet?" & _
vbCrLf & "(z.B. 12.06.2017 oder auch 12.6 für das laufende Jahr):"
Dim Antwort As String
Do
Antwort = InputBox(Frage, "Datum eintragen")
'Abfrage ob "Abbrechen" geklickt wurde
If StrPtr(Antwort) = 0 Then Exit Sub ' wird true wenn man "Abbrechen" klickt
'Schleife solange ausführen bis IsDate(Antwort) ein Datum ergibt
Loop Until IsDate(Antwort)
'Me.txtDatum = cdate(Antwort)
'Umwandlung der Stringvariablen Antwort in ein Datum mit CDate
MsgBox CDate(Antwort)
End Sub
Es handelt sich hier bei dem Datumabfragefeld um ein ungebundenes Textfeld welches nicht in einer Tabelle enthalten ist und in einem Bericht enthalten ist, der nur Text enthält außer diesem einen Feld!
Vielen Dank an alle!
Herbert
Sollte das nicht eher so aussehen?
MsgBox CDate(Antwort) 'auskommentieren ('), da nur Kontrolle
'Umwandlung der Stringvariablen Antwort in ein Datum mit CDate
Me.txtDatum = cdate(Antwort) 'KEIN Kommentar sondern die IMO entscheidende Code-Zeile
Ja, stimmt! Habe ich auch so gemacht!