Userform loopt vast als textbox perongeluk een letter krijgt ipv een cijfer

Status
Niet open voor verdere reacties.

rayda39

Gebruiker
Lid geworden
20 mrt 2009
Berichten
84
Beste Leden,

Ik zal proberen zo goed mogelijk uitleggen waar ik tegen aan loop en graag zou willen.
Als eerst wil ik graag zeggen dat ik geen specialist ben en veel knip en plak werk gebruik en soms ook zelf iets verzin.

Ik heb de volgende file gemaakt Urenstaat in Excel 2019 Versie 1.20 (Office 2007-2016) 3446.xlsm (toegevoegd als bijlage) op het tabblad Uren 3446 staat een knop "Button 1" deze opent een userform.

Hieronder een voorbeeld
Capture.PNG
Hierin vul ik 5 vakjes (textbox1 t/m 5) de uitkomst komt dan in TextBox6.
Dit werkt prima met de volgende code.

In een ClassModule
Code:
Public WithEvents m_T As MSForms.TextBox

Private Sub m_T_Change()
    y = 0
     For Each it In m_T.Parent.verz
    If it.m_T.Text <> "" Then y = y + it.m_T.Text
  Next
   
 m_T.Parent.TextBox6 = y

End Sub

In de userform zelf

Code:
Public verz As New Collection

Private Sub UserForm_Initialize()

DTPicker1.Value = Date
Application.Calculation = xlAutomatic

  For Each it In Controls
     If TypeName(it) = "TextBox" And InStr("12345", Right(it.Name, 1)) Then
         verz.Add New clsTextBox
         Set verz.Item(verz.Count).m_T = it
    End If
  Next
End Sub

Nu is het zo dat als er perongeluk een letter in een van de textvakjes zet loop de onderstaande code vast (debug melding, voorbeeld toegevoegd en code staat ook boven aan deze vraag).

Capture.PNG

Nu heb ik hier een manier omheen gevonden en dat is de volgende code

Code:
Private Sub TextBox1_Change()

    If TypeName(Me.ActiveControl) = "TextBox" Then

        With Me.ActiveControl

            If Not IsNumeric(.Value) And .Value <> vbNullString Then

                MsgBox "Sorry, Alleen cijfers toegestaan 0,25 is gelijk aan 15 minuten"

                .Value = vbNullString

            End If

        End With

    End If
 
End Sub


Private Sub TextBox2_Change()

    If TypeName(Me.ActiveControl) = "TextBox" Then

        With Me.ActiveControl

            If Not IsNumeric(.Value) And .Value <> vbNullString Then

                MsgBox "Sorry, Alleen cijfers toegestaan 0,25 is gelijk aan 15 minuten"

                .Value = vbNullString

            End If

        End With

    End If
 
End Sub
Private Sub TextBox3_Change()

    If TypeName(Me.ActiveControl) = "TextBox" Then

        With Me.ActiveControl

            If Not IsNumeric(.Value) And .Value <> vbNullString Then

                MsgBox "Sorry, Alleen cijfers toegestaan 0,25 is gelijk aan 15 minuten"

                .Value = vbNullString

            End If

        End With

    End If
 
End Sub
Private Sub TextBox4_Change()

    If TypeName(Me.ActiveControl) = "TextBox" Then

        With Me.ActiveControl

            If Not IsNumeric(.Value) And .Value <> vbNullString Then

                MsgBox "Sorry, Alleen cijfers toegestaan 0,25 is gelijk aan 15 minuten"

                .Value = vbNullString

            End If

        End With

    End If
 
End Sub
Private Sub TextBox5_Change()

    If TypeName(Me.ActiveControl) = "TextBox" Then

        With Me.ActiveControl

            If Not IsNumeric(.Value) And .Value <> vbNullString Then

                MsgBox "Sorry, Alleen cijfers toegestaan 0,25 is gelijk aan 15 minuten"

                .Value = vbNullString

            End If

        End With

    End If
 
End Sub

Dan loop de code niet vast en ik krijg dan mooi een melding zodat er verplicht met cijfers moet worden gewerkt.

Mijn vraag.

  1. Kan deze code simpeler?, zodat het in eerste instantie niet vast loopt? en toch een melding krijgen dat er alleen met cijfers gewerkt moet worden

Hopenlijk kan iemand mij helpen en heb ik het goed genoeg uitgelegd.

Mvg
 

Bijlagen

  • Urenstaat in Excel 2019 Versie 1.20 (Office 2007-2016) 3446.xlsm
    42,4 KB · Weergaven: 36
Zet de controle in de ClassModule
bv
Code:
Private Sub m_T_Change()
    y = 0
     For Each it In m_T.Parent.verz
      If IsNumeric(it.m_T.Text) Then
          y = y + it.m_T.Text
        ElseIf it.m_T.Text <> "" Then
          MsgBox "Sorry, Alleen cijfers toegestaan 0,25 is gelijk aan 15 minuten"
          it.m_T.Text = ""
          Exit Sub
      End If
  Next
   
 m_T.Parent.TextBox6 = y

End Sub
 
Enorm bedankt VenA,

Van heel vel code naar slechts en paar rijen.
Helemaal top.

Mvg:D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan