VBA Fehlerhafter Wert für Fehlerroutine speichern und an angemessener Stelle nutzen

  • Access

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Zyran.

    VBA Fehlerhafter Wert für Fehlerroutine speichern und an angemessener Stelle nutzen

    Hallo zusammen,

    folgende Aufgabenstellung:

    Anzahl Ihrer Kinder [TextBox as Byte]
    Überwachen Sie, dass bei der Kinderzahl keine Buchstaben oder zu große Werte eingegeben werden.

    Mein Problem:

    Wenn ich in die TextBox 256 eingebe, geht das Programm in die Fehlerroutine über und zeigt mir eine Messagebox an, das der eingegeben Wert zu groß ist. Wenn ich jetzt allerdings einen Buchstaben eingebe, bleibt der Wert der TextBox = 0 da sie ja als Byte deklariert wurde. Wie kann ich den eingegebenen Wert mit in die Fehlerroutine übernehmen, sodass darüber eine separate Fehlermeldung ausgegeben werden kann?

    Beispiel:

    Ich gebe in die TextBox eine 256 ein, drücke auf den Button daneben, danach öffnet sich eine Messagebox mit dem Text "Sie haben die maximale Anzahl von 255 Kindern überschritten." Wenn ich stattdessen aber einen Buchstaben eingebe, möchte ich die Meldung "Bitte geben Sie nur Zahlen ein." angezeigt bekommen.

    ​Mit freundlichem Gruß
    Zyran
    Wie erhältst Du denn die Fehlermeldungen? Mit welchen Fehlerbehandlungsmethoden arbeitest Du? Wie ist der Code, um zur 1. MessageBox zu kommen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VB.NET-Quellcode

    1. Private Sub cmdAufgabe4_Click()
    2. Dim bytKinderzahl As Byte 'Dieser Befehl darf nicht geändert werden
    3. Dim JaNein As Byte
    4. On Error GoTo Fehler
    5. 'Sorgen Sie dafür, dass das Programm nicht abbricht, wenn Buchstaben oder zu große Werte eingegeben wurden.
    6. 'Geben Sie in diesem Fall eine AUSSAGEFÄHIGE Fehlermeldung aus
    7. 'Bei mehr als 10 Kindern fragen Sie bitte nach, ob das stimmen kann
    8. Einlesen:
    9. bytKinderzahl = Me.txtKinder
    10. If bytKinderzahl > 10 Then
    11. JaNein = MsgBox("Sie haben " & bytKinderzahl & " Kinder angegeben. Ist das so korrekt?", vbQuestion + vbDefaultButton2 + vbYesNo, "Sind sie sicher?")
    12. If JaNein = vbNo Then
    13. Exit Sub
    14. Else
    15. Exit Sub
    16. End If
    17. End If
    18. 'MsgBox "Sie haben " & bytKinderzahl & " Kind/er angegeben.", vbInformation, "Anzahl der Kinder"
    19. Exit Sub
    20. Fehler:
    21. 'Select Case bytKinderzahl
    22. ' Case isInteger
    23. ' MsgBox "Sie haben die maximale Anzahl von 255 Kindern überschritten.", vbCritical, "Fehler bei der Eingabe"
    24. ' Case InNotInteger
    25. ' MsgBox "Bitte geben Sie nur Zahlen ein.", vbCritical, "Fehler bei der Eingabe"
    26. 'End Select
    27. If bytKinderzahl = Str(bytKinderzahl) Then
    28. MsgBox "Bitte geben Sie nur Zahlen ein.", vbCritical, "Fehler bei der Eingabe"
    29. Else
    30. MsgBox "Sie haben die maximale Anzahl von 255 Kindern überschritten.", vbCritical, "Fehler bei der Eingabe"
    31. End If
    32. End Sub


    ​Das ist der aktuelle Programmcode.

    ​Gruß Zyran

    Visual Basic-Quellcode

    1. If bytKinderzahl = Str(bytKinderzahl) Then
    Das ist Murks. Die Fehlerroutine mittels On Error sollte nur für Notfälle gedacht sein, nicht für regulären Programmfluss. Du solltest txtKinder auswerten, nicht bytKinderzahl:

    Visual Basic-Quellcode

    1. If Not IsNumeric(txtKinder) Then
    2. MsgBox "Bitte nur Zahlen"
    3. Exit Sub
    4. ElseIf CInt(txtKinder) < 0 Or CInt(txtKinder) > 255 Then
    5. MsgBox "falscher Eingabewert"
    6. Exit Sub
    7. End If

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.