Anzahl Zeichen in Textbox begrenzen

  • Excel

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    OK,
    so klappt es dann schon besser,
    wobei mir die Messagebox da nicht gefällt und die falschen Werte auch stehen bleiben, auch wenn man dann permanent per Messagebox benachrichtigt wird.

    Visual Basic-Quellcode

    1. Dim values() As String
    2. Dim i As Integer
    3. values() = Split(txtA.Text, ",")
    4. If UBound(values) = 15 Then
    5. txtA.Text = Mid(txtA.Text, 1, Len(txtA.Text) - 1)
    6. Else
    7. For i = 0 To UBound(values())
    8. If values(i) <> "" Then
    9. If cint(values(i)) < 1 Or cint(values(i)) > 53 Then
    10. MsgBox "Wert falsch"
    11. Exit For
    12. End If
    13. End If
    14. Next i
    15. End If


    CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wie schon 2mal geschrieben: Sobald eine Eingabe ok ist, steck den TextBox-Text in eine Stringvariable, damit sich Dein Programm diesen korrekten Wert merkt. Wenn dann eine falsche Eingabe gemacht wird, lass keine MessageBox aufploppen, sondern pack den gemerkten Wert in die TextBox wieder rein. So bleibt der Inhalt der TextBox immer valide.
    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.
    An Stelle einer Messagebox würde ich ein Label einblenden, hinter oder unter der Textbox.
    Oder man kann mit Farben arbeiten, Text Rot darstellen, oder Hintergrundfarbe ändern.
    Bei richtiger Eingabe muss man dies dann wieder rückgangig machen.
    Oder man setzt am Anfang immer alles auf den Ursprungszustand, und nur wenn ein Fehler kommt zeigt man das Label oder die Farbe.

    VaporiZed schrieb:

    Wie schon 2mal geschrieben: Sobald eine Eingabe ok ist, steck den TextBox-Text in eine Stringvariable, damit sich Dein Programm diesen korrekten Wert merkt. Wenn dann eine falsche Eingabe gemacht wird, lass keine MessageBox aufploppen, sondern pack den gemerkten Wert in die TextBox wieder rein. So bleibt der Inhalt der TextBox immer valide.

    Da stell ich mich wohl blöd an, hab jetzt mehres versucht, allerdings erfolglos....

    Visual Basic-Quellcode

    1. Dim values() As String
    2. Dim i As Integer
    3. Static strOK As String
    4. values() = Split(txtA.Text, ",")
    5. If UBound(values) = 15 Then
    6. txtA.Text = Mid(txtA.Text, 1, Len(txtA.Text) - 1)
    7. Else
    8. For i = 0 To UBound(values())
    9. txtA.BackColor = vbWhite
    10. If values(i) <> "" Then
    11. If CInt(values(i)) >= 1 And CInt(values(i)) <= 53 Then
    12. strOK = txtA.Text
    13. Else
    14. txtA.BackColor = vbRed
    15. txtA.Text = strOK
    16. Exit For
    17. End If
    18. End If
    19. Next i
    20. End If

    Was damit aber eh wenn ich es richtig verstehe noch nicht abgefangen wäre, wäre wenn z.b. zwei (oder mehr) Kommas direkt hintereinander eingegeben würden!?

    SoEinVBler schrieb:


    Oder man kann mit Farben arbeiten, Text Rot darstellen, oder Hintergrundfarbe ändern.
    .

    Das ist eine gute idee, das hab ich hinbekommen

    CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Zum einen: Bitte den VB6-CodeTag verwenden, siehe hier: CodeTags

    Zum anderen: Ich will nicht alles vorgeben, aber als Grundgerüst:

    Visual Basic-Quellcode

    1. Static strOK As String
    2. If UserInputIsOK() Then
    3. strOK = txtA.Text
    4. txtA.BackColor = vbWhite
    5. Else
    6. txtA.Text = strOK
    7. txtA.BackColor = vbRed
    8. End If
    9. '…
    10. Function UserInputIsOK() As Boolean
    11. 'hier Dein Code, der überprüft, ob die Eingaben in Ordnung sind
    12. End Function
    Der Code in der UserInputIsOK-Function ist fast gleich mit Deinem bisherigen Validierungscode. Ich bin mir sicher, dass Du das zum Laufen bekommst.
    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.
    Hi,
    ich glaube es funktioniert jetzt so, sieht zumindest so aus nach den ersten Tests. Man könnte zwar auch immer noch einfach nur 15 Komma eingeben, aber denk mal nicht das das einer macht.
    So ganz versteh ich aber noch nicht wieso es funktioniert....
    Vielen Dank für die geduldige hilfe bis hier hin.

    Visual Basic-Quellcode

    1. ​Private Sub txtA_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    2. Select Case KeyAscii
    3. Case 48 To 57 ' 0 - 9
    4. Case 44 ' Komma
    5. Case Else
    6. KeyAscii = 0
    7. MsgBox "Hier dürfen nur Zahlen und Kommata eingegeben werden. ", vbInformation
    8. End Select
    9. End Sub


    Visual Basic-Quellcode

    1. Private Sub txtA_Change()
    2. Static strOK As String
    3. If UserInputIsOK() Then
    4. strOK = txtA.Text
    5. txtA.BackColor = vbWhite
    6. Else
    7. txtA.Text = strOK
    8. txtA.BackColor = vbRed
    9. End If
    10. End Sub


    Visual Basic-Quellcode

    1. Function UserInputIsOK() As Boolean
    2. Dim values() As String
    3. Dim i As Integer
    4. values() = Split(txtA.Text, ",")
    5. If UBound(values) = 15 Then
    6. txtA.Text = Mid(txtA.Text, 1, Len(txtA.Text) - 1)
    7. Else
    8. For i = 0 To UBound(values())
    9. If values(i) <> "" Then
    10. UserInputIsOK = True
    11. If CInt(values(i)) < 1 Or Int(values(i)) > 53 Then
    12. UserInputIsOK = False
    13. Exit For
    14. End If
    15. End If
    16. Next i
    17. End If
    18. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tina“ ()

    Zu frühe gefreut...
    Ich lasse beim speichern der Seite dann auch alle Controls leeren über ein

    Visual Basic-Quellcode

    1. Sub UF_clean()
    2. Dim Objekte As Control
    3. For Each Objekte In Controls
    4. Select Case TypeName(Objekte)
    5. Case "TextBox"
    6. Objekte.Text = ""
    7. Case "ComboBox"
    8. Objekte.ListIndex = -1
    9. Case "CheckBox"
    10. Objekte.Value = False
    11. End Select
    12. Next
    13. End Sub


    Dabei wird aber die Textbox dann leider nicht komplett gellert, sondern es steht immer eine Eins "1" drin und sie wird rot unterlegt, woran liegt das jetzt noch und wie kann ich das noch korrigieren`?
    Gegenfrage: Was passiert während der Laufzeit, wenn Du eine Ziffer reinschreibst und diese dann löschst.
    Überdenk nochmal kurz Deine Variablenbenennung:
    For Each Objekte In Controls = Für jedes Objekte in Controls …
    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.
    Unabhängig vom eigentlichen Problem fällt mir da auf, dass Objekte.Value = False falsch ist und es Objekte.Value = vbUnchecked heißen muss. Die Value-Eigenschaft einer Checkbox hat drei Zustände, nicht nur zwei, und ist deshalb kein Boolean. Klappt hier nur zufälligerweise, weil False und vbUnchecked beide der Zahl 0 entsprechen.

    Wegen des Problems: Falls ein leeres Eingabefeld auch OK ist, so könnte es klappen, wenn du in txtA_Change die Zeile 4 änderst zu If txtA.Text = "" Or UserInputIsOK() Then. Bedenke aber, dass UserInputIsOK so trotzdem aufgerufen wird.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum