Mostrar Msgbox solo una vez al ingresar un dato erróneo en un textBox.

Para: Dante Amor

Tengo un Textbox en la que ingreso un valor determinado si esta sobre pasa me manda el mensaje indicando "Este valor es muy alto" si el valor es mayor a 12.00 o "Este valor es muy bajo" si el valor es menor a 11.00, Hasta ahí perfecto pero el detalle esta que si yo sigo ingresando mas números este me continua mostrando el mensaje lo cual es fastidioso como puedo hacer para que me salga el mensaje tan solo una vez

Intente realizar esta hazaña pero sin resultados aquí te dejo el código que implemente en el textbox.

Private Sub TextBox1_Change()
TextBox1.MaxLength = 5
If Val(TextBox1) < 11 Then
TextBox1.BackColor = &H80000005
MsgBox "Este Valor es muy Bajo"
Else
If Val(TextBox1) <= 12 Then
TextBox1.BackColor = &HFF00&
ElseIf Val(TextBox1) > 12 Then
TextBox1.BackColor = &HFF8&
MsgBox "Este Valor es muy alto"
End If
End If
End Sub

2 respuestas

Respuesta
1

Si cambias el evento Chage por el evento Exit, lo tienes solucionado. El evento Exit sólo se ejecuta, cuando sales del control TextBox1.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.MaxLength = 5
If Val(TextBox1) < 11 Then
    TextBox1.BackColor = &H80000005
    MsgBox "Este Valor es muy Bajo"
 Else
    If Val(TextBox1) <= 12 Then
            TextBox1.BackColor = &HFF00&
        ElseIf Val(TextBox1) > 12 Then
            TextBox1.BackColor = &HFF8&
            MsgBox "Este Valor es muy alto"
    End If
End If
End Sub

Si te ha valido la respuesta.

No lo había visto antes, pero la instrucción TextBox1.Maxlength= 5, no debe ir ahí. Cambia el valor, directamente en las propiedades del Textbox1, de esta forma cada vez que cargues el form que tiene ese control, este sólo permitirá un máximo de 5 caracteres.

Hola! Marcial

Gracias por la gran ayuda que me brindas, e probado el código que me diste y relativamente anda bien pero tiene un inconveniente cuando yo me salteo del textbox1 al textbox2 este me manda el mensaje que el valor es muy Bajo" sin que haya ingresado ningún dato cual sera el inconveniente.

Entonces hay que comprobar, que hay algún valor en el TextBox. Pon una condición al principio del evento Change, que lo compruebe. De esta forma:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Si no hay nada en el textbox, que salga del evento'
If TextBox1.Value = "" Then Exit Sub
If Val(TextBox1) < 11 Then
    TextBox1.BackColor = &H80000005
    MsgBox "Este Valor es muy Bajo"
 Else
    If Val(TextBox1) <= 12 Then
            TextBox1.BackColor = &HFF00&
        ElseIf Val(TextBox1) > 12 Then
            TextBox1.BackColor = &HFF8&
            MsgBox "Este Valor es muy alto"
    End If
End If
End Sub

Si te ha valido la respuesta.

Respuesta
1

Puede ser así:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case TextBox1
        Case "": Exit Sub
        Case Is < 11
            TextBox1.BackColor = &H80000005
            MsgBox "Este Valor es muy Bajo"
        Case 11, 12: TextBox1.BackColor = &HFF00&
        Case Else
            TextBox1.BackColor = &HFF8&
            MsgBox "Este Valor es muy alto"
    End Select
End Sub
Private Sub UserForm_Activate()
    TextBox1.MaxLength = 5
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta

Hola! Dante 

El código que me indicas siempre me manda que el valor esta alto, estoy ingresando un valor de 11.00 a 12.00 que es normal y me manda el mensaje de alto y aparte que el relleno del textbox lo pone de rojo cual sera el inconveniente.

Cambia por esta

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case TextBox1
        Case "": Exit Sub
        Case Is < 11
            TextBox1.BackColor = &H80000005
            MsgBox "Este Valor es muy Bajo"
        Case 11 To 12: TextBox1.BackColor = &HFF00&
        Case Else
            TextBox1.BackColor = &HFF8&
            MsgBox "Este Valor es muy alto"
    End Select
End Sub
Private Sub UserForm_Activate()
    TextBox1.MaxLength = 5
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas