Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Eingabeprüfung

Betrifft: Eingabeprüfung von: Tobias
Geschrieben am: 30.04.2008 21:22:07

Hallo,
ich drehe mich bei einem Problem im Kreis und hoffe Ihr könnt mir helfen...
In einem Textfeld hat der Benutzer die Möglicheit einen Zahlenwert einzugeben. Bei jedem Key-Up event geprüft werden, ob es sich um eine Zahl handelt und, ob diese in einem bestimmten Bereich liegt (z.B. -90 bis +90). Den Key-Up event benötige ich, da ich damit noch andere Kalkulationen steuere.
Momentan verwirkliche ich die Prüfung auf Zahlenwerte mit der ISNumeric-Funktion. Leider meldet diese mir auch einen Fehler, wenn ich das Minuszeichen (-) eingebe...

Hier mal mein momentaner Code. Leider funktioniert beides, die Zahlenprüfung sowie die Eingabewertüberprüfung nicht so richtig:

Private Sub Eingabefeld_KeyUp(ByVal sender As System.Object, ByVal e As System.EventArgs)  _
Handles TGT_Inclination_FillIn_DEG.KeyUp
         If Eingabefeld.Focused Then
            Select Case Eingabefeld.Text
                Case -90 To 90
                    'If IsNumeric(TGT_Inclination_FillIn_DEG.Text) Then
                    'Else
                Case Else
                    Dim msg As String
                    Dim title As String
                    Dim style As MsgBoxStyle
                    Dim response As MsgBoxResult
                    msg = "Incorrect Input Value." & vbNewLine & "Only values from -90 to +90  _
are possible."
                    style = MsgBoxStyle.Information
                    title = "Message"
                    response = MsgBox(msg, style, title)
                    Eingabefeld.Text = "0"
            End Select
        End If
    End Sub



Ich hoffe Ihr könnt mir helfen!
Gruß, Tobias

  

Betrifft: AW: Eingabeprüfung von: Hajo_Zi
Geschrieben am: 30.04.2008 21:37:34

Hallo Tobias,

ich hätte dafür Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) benutzt.

GrußformelHomepage


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 30.04.2008 21:50:27

Hallo Hajo,
danke für den Tip. Allerdings ändert das nichts an dem Resultat, dass die Texterkennung nicht funktioniert...


  

Betrifft: AW: Eingabeprüfung von: Renee
Geschrieben am: 30.04.2008 21:54:11

Hi Tobias,

Dann versuch mal die Zeile
Select Case Eingabefeld.Text
auf
Select Case Val(Eingabefeld.Text)
zu ändern.

GreetZ Renée


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 30.04.2008 22:02:17

Hey Renée,

das war's! Super, vielen Dank!
Wäre ich glaube ich nicht frauf gekommen...

Gruß, Tobias


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 30.04.2008 22:20:57

Hallo Renée,

ich habe jetzt das problem, dass die Eingabe das Komma (,) akzeptiert und damit die Eingabe von mehr als 90 akzeptiert (z.B. 90,8).
Hast Du da eine Idee? Mit dem Punkt als Trennzeichen funktioniert alles...

Gruß, Tobias


  

Betrifft: AW: Eingabeprüfung von: Hajo_Zi
Geschrieben am: 01.05.2008 08:24:21

Hallo Tobias,

Du hast meinen Ansatz abgetan, ich vermute das ergab sich aus Deinem Wissenstand. Ich bin aber immer noch der Auffassung mein Ansatz war korrekt.

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If TextBox1 <> "" And KeyAscii <> 45 Then
            Select Case KeyAscii
                Case 48 To 57
                Case Else
                     KeyAscii = 0
            End Select
    End If
    If TextBox1 <> "" And TextBox1 <> "-" Then
        If Abs(CInt(TextBox1)) > 10 Then
            KeyAscii = 0
        End If
    End If
End Sub


Gruß Hajo


  

Betrifft: AW: Eingabeprüfung von: Renee
Geschrieben am: 01.05.2008 09:38:06

Hi Tobias,

Eigentlich erwarte ich beiVBA gut keine so trivialen Fragen.


If Val(Eingabefeld.Text) & "" <> Eingabefeld.Text  Then MsgBox "Da ist was faul"



GreetZ Renée


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 01.05.2008 09:59:32

Hi Renée,

vielleicht habe ich mich da ein wenig überschätzt. Aber trotzdem danke für die Antwort!
Allerdings löst der von Dir genannte Code nicht mein Problem.
Jetzt bekomme ich wieder die Fehlermeldung, wenn ich das Minuszeichen eingebe...

Gruß, Tobias


  

Betrifft: AW: Eingabeprüfung von: Renee
Geschrieben am: 01.05.2008 11:33:27

Hi Tobias,

Dann nimm Hajos Einwände ernst-
So:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If InStr(TextBox1, "-") > 1 Or _
        (Len(TextBox1) - Len(Replace(TextBox1, ".", ""))) > 1 Or _
        Val(TextBox1) < -90 Or Val(TextBox1) > 90 Then
        MsgBox "Werte nur zwischen -90.0 und 90.0"
    Else
        MsgBox "So geht's : " & Val(TextBox1)
    End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii < 45 Or KeyAscii > 57 Or KeyAscii = 47 Then KeyAscii = 0
End Sub



GreetZ Renée


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 01.05.2008 14:42:21

Sorry, also bei mir klappt das nicht. Auch das KeyAscii Argument wird bei mir nicht erkannt. Ich benutze Visual Basic 2008. Kann das sein, dass da dieses Argument nicht mehr verwendet werden kann?

Vielleicht habe ich mich auch falsch ausgedrückt... Ich möchte, dass es dem Nutzer garnicht erst möglich ist falsche Werte einzugeben, um spätere Kalkulationen nicht zu stören. Außerdem soll das Eingabefeld so benutzerfreundlich wie möglich sein. Momentan habe ich das Problem so gelöst:

Private Sub Eingabefeld_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)  _
Handles Eingabefeld.TextChanged
        Eingabefeld.Text = Eingabefeld.Text.Replace(",", ".")
       Eingabefeld.SelectionStart = 5
       Eingabefeld.Focused Then
            Select Case Val(Eingabefeld.Text)
                Case -90 To 90

                Case Else
                    Dim msg As String
                    Dim title As String
                    Dim style As MsgBoxStyle
                    Dim response As MsgBoxResult
                    msg = "Incorrect Input Value." & vbNewLine & "Only -90 to 90 is possible."
                    style = MsgBoxStyle.Information
                    title = "Big Brother"
                    response = MsgBox(msg, style, title)
                    Eingabefeld.Text = "0"
                    Eingabefeld.SelectAll()
            End Select
        End If
    End Sub



Ich weiß, der Code ist sehr eigenwillig aber wahrscheinlich bin ich wirklich nicht so sehr im Programmieren bewandert. Das einzige Problem, das ich jetzt noch habe ist, dass Nutzer andere Eingaben wie Buchstaben, Klammern etc. eintragen können ohne, dass dies verhindert wird...

Hast Du vielleicht noch einen Input bezüglich meines anderen Threats mit dem Tab des TabControls? Ich würde gern ein Tab mit Passwort schützen...

Gruß, Tobias


  

Betrifft: AW: Eingabeprüfung von: Renee
Geschrieben am: 01.05.2008 15:19:32

Hi Tobias,

Ich benutze Visual Basic 2008. Dann bist du hier in einem falschen Forum, den hier dreht sich eigentlich alles um EXCEL und VBA (Visual Basic for Application). Damit kan ich dir nicht sagen, was für Event-Prozeduren standardmässig zur Verfügung stehen.

Sorry, Renée


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 01.05.2008 15:22:02

Na gut. Aber trotzdem vielen Dank für die Hilfe!
Gruß, Tobias


  

Betrifft: AW: Eingabeprüfung von: Hajo_Zi
Geschrieben am: 30.04.2008 21:56:05

Hallo Tobias,

ich hatte gelesen das Du Zahlen nur eingeben möchtest, jetzt Text?
Mal ein Code nicht Exploicit auf Dein Proiblem zzugeschnitten. Aber Bei VBA Gut dürfte die Anpassung kein Problem sein.


Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'   Ansatz VB 6 Buch von Peter Monadjemi
'   nur Zahlen, ein Komma und nur 2 Stellen nach Komma
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
            If InStr(TextBox8, ",") <> 0 Then
                If Len(TextBox8) - InStr(TextBox8, ",") > 1 Then KeyAscii = 0
            End If
        Case Asc("."), Asc(",")
            If InStr(TextBox8, ",") <> 0 Then
                KeyAscii = 0
            Else
                KeyAscii = Asc(",")
            End If
        Case Asc(vbBack)
            '       Eingabe von minus
        Case Asc("-")
            '            If Len(Textbox8) = 0 Then
            '                If InStr(Textbox8, "-") <> 0 Then
            '                Else
            '                    KeyAscii = Asc("-")
            '                End If
            '            Else
            '                KeyAscii = 0
            '            End If
        Case Else
            KeyAscii = 0
    End Select
End Sub


Gruß Hajo


  

Betrifft: AW: Eingabeprüfung von: Tobias
Geschrieben am: 30.04.2008 22:03:56

Hallo Hajo,

vielen Dank. Renée hat die meinem Problem nächste Lösung gefunden.
Schöne Feiertage!

Gruß, Tobias