Como quitar mensaje Invalid Propety Value?

Tengo unos combobox y text limitados para que solo se puedan introducir datos que existan.
El problema es que si por error hago click en uno de estos objetos y quiero salir sin escribir ni elegir ninguna opción me sale un mensaje de error Invalid Propety Value y no me deja seguir.

Supongo que el error esta en el código y por eso no me deja.
Tengo activadas las propiedades MachEntry (coincidencia completa) y MachRequired (True)
¿Cuál es el fallo?

2 respuestas

Respuesta
1

Sinceramente desconozco cual puede ser el fallo, pero prueba con esta línea muy usada en estos casos. On Error Resume Next. Lo colocas al principio de la rutina a ver si te sirve. No es una practica muy recomendable porque no soluciona el problema.

Sigue pasándome mostrándome el mismo mensaje. Es como si obligatoriamente en ese momento tenga que introducir un dato en ese combobox. En el momento que acepto y elijo una opción me deja seguir

Entonces va a ser por las propiedades MachRequired o MachEntry. Realiza pruebas por ahí.

Es por el MachRequired, si lo desactivo no me sale ese error. El problema que tengo es que el combobox se puede escribir y me gustaría que solo quedara limitado a los datos de desplegable.


¿Hay alguna manera de hacer eso por código para que no me de ese error?

Prueba así. Pero debes cambiar donde pone ComboBox1 por el nombre que tengas y cambia las opciones MachEntry y MachRequired. Para introducir el código has doble click en el Combo en cuestión.

Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = 0
End Sub

No me deja escribir nada en el combo.

Con el metodo de Andy ya tengo el problema resuelt, muchas gracias Carlos 

Me alegro que se haya resuelto.

Respuesta
1

Ese es el error por defecto que da Excel cuando tienes MatchRequired. Si quieres tener tu propio mensaje de error personalizado, debes poner MatchRequired = False y escribir tu propia validación en el evento Exit o AfterUpdate.

Para validar que el texto escrito pertenece a un Item de la lista, se usaría el ListIndex. Cuando el ListIndex es -1 significa que lo escrito no es parte de la lista, y este seria el disparador para tu validación personalizada.

Ejemplo:

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.ComboBox1.ListIndex = -1 And Me.ComboBox1.Text <> vbNullString Then
    With Me.ComboBox1
        .Text = vbNullString
        .SetFocus
    End With
    MsgBox "Por favor seleccione un Item Valido"
    'Exit Sub
End If
End Sub

Andy

El . SetFocus está de más, error mio, para devolverle el foco se debe usar el argumento Cancel.

Así:

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.ComboBox1.ListIndex = -1 And Me.ComboBox1.Text <> vbNullString Then
    With Me.ComboBox1
        .Text = vbNullString
        Cancel = True
    End With
    MsgBox "Por favor seleccione un Item Valido"
End If
End Sub

Que cancela el evento Exit, osea, Exit nunca llega a ocurrir así que el foco se queda en el objeto. Siempre olvido que Exit tiene más prioridad que SetFocus y por eso el SetFocus es ignorado.

Andy

Hola Andy, con el Cancel =true me da error. Aunque con el Setfocus me funcio (a simple vista)

¿Si dejo el SetFocus puedo tener algún problema?

No tienes ningún problema, solo que no hace nada, estará por gusto. Y el cancel no te funciona porque le has puesto un punto adelante ja ja. Fíjate bien en mi código, no hay punto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas