Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: herb54 am August 13, 2018, 12:24:02

Titel: Fehlerroutine funktioniert nicht 100%
Beitrag von: herb54 am August 13, 2018, 12:24:02
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
Titel: Re: Fehlerroutine funktioniert nicht 100%
Beitrag von: Lachtaube am August 13, 2018, 13:15:14
Ü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
Titel: Re: Fehlerroutine funktioniert nicht 100%
Beitrag von: MzKlMu am August 13, 2018, 13:52:28
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.
Titel: Re: Fehlerroutine funktioniert nicht 100%
Beitrag von: herb54 am August 13, 2018, 15:08:27
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
Titel: Re: Fehlerroutine funktioniert nicht 100%
Beitrag von: Beaker s.a. am August 13, 2018, 16:39:27
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
Titel: Re: Fehlerroutine funktioniert nicht 100%
Beitrag von: herb54 am August 15, 2018, 08:37:51
Ja, stimmt! Habe ich auch so gemacht!