Instrucción si no está entre las opciones del combobox de un formulario

Soy algo nuevo y tal vez sea muy sencillo pero me encuentro atorado:

Tengo un combobox dentro de un formulario, expresando lo que quiero decir en pseudocódigo sería algo así

Si combobox1 no es "E" o "S" o "I" entonces MsgBox ("En el combobox debe escribirse "E", "S" o "I" ")

En realidad tengo varios texbox, optionbutton y combobox en un formulario, es por eso que necesito hacerlo de esta forma.

Algo así como if combobox <> "E" or "S" or "I" then ... Pero claro, no acepta el or aquí.

Otra cosa que intenté es poner la opción matchentry como true (en el combobox tengo almacenado E, S e I), ¿aquí la cuestión sería cómo hacer para personalizar el mensaje de error?

1 respuesta

Respuesta
1

Los combobox se utilizan justamente para acotar el ingreso de datos.

Si a tu control sólo le dejas como posibles valores esas 3 letras el usuario nunca podra ingresar otras por lo que te evitarás el control y posible mensaje de error.

Podrías colocar en el evento Initialize del UF (entiendo que por 'formulario' se trata de un userform):

Combobox1. Additem "E"

Combobox1. Additem "I"

Combobox1. Additem "S"

Si fuesen más letras ya te pasaría un bucle.

Y así acotas cada combobox.

De todos modos te dejó una instrucción para el Msg:

If combobox1 <> "E" and combobox1 <> "I" and combobox1 <> "S" Then

Msgbox "mensaje"

Combobox1.setfocus

'Exit Sub

End if

* Si esta respuesta resuelve tu problema no olvides valorarla (buena o Excelente). Sino comenta o solicita aclaraciones.

Elsa Matilde muchas muchas muchas gracias por tu ayuda.

El segundo caso que me explicas funcionó perfectamente, sabía que debía de haber forma de poner más de una condición en la misma función lógica, no se me ocurrió poner "and" y de nuevo el objeto combobox.

Ahora, para el primer caso, efectivamente, ya tengo en el código la instrucción ".Additem" con "E", "I" y "S", es decir, ya están estos valores cargados en el combobox. Lo que tú sugieres es que no permita la escritura con el teclado de algún caracter en el combobox y forzosamente haya que desplegar la lista del combobox?

Esta sería una solución pero como precisamente estoy desarrollando el formulario para que la captura (que es bastante extensa) sea más ágil, sin separar las manos del teclado esto se vuelve realidad, si hay que soltar el teclado, ir por el mouse, posicionarlo en la flecha, desplegar la lista y escoger la opción al cabo de tantos ingresos lo hace lento. 

Aún así la cuestión sería creo, si es posible que la instrucción sea algo así (disculpa que de nuevo use pseudocódigo pero mis conocimientos son muy limitados)

"Si lo digitado (alguna letra puesta con el teclado seguida de un enter) en el combobox1 es diferente a lo contenido en el combobox1 (es decir, lo que se encuentra en la lista desplegable que se agregó mediante .Additem), muestra un mensaje de error que diga "Error"

Eso es porque por el momento sólo son 3 opciones (E, S o I), pero lo pregunto por un futuro caso al que aún no llego que las opciones van a ser demasiadas y posiblemente dinámicas como para declararlas una por una.

¿Cómo ves? ¿Estoy loco?

De nuevo muchas gracias por tu ayuda.

Saludos!

No, no necesitas salir del teclado.

Si tuviste la precaución de configurar los controles de tal modo de saltar en orden de 1 a otro control (propiedad TabIndex) entonces podrás pasar de un textbox al combo y de allí a otro control.

En el evento Initialize llenas el combo con los posibles valores :

Private Sub UserForm_Initialize()
ComboBox1. AddItem "E"
ComboBox1. AddItem "I"
ComboBox1. AddItem "S"
End Sub

Las propiedades a revisar son:

MatchEntry = 1

MatchRequired = True

Esto hará que si te equivocas en alguna letra te aparecerá el mensaje de control... Enter para aceptar el mensaje, retroceder e ingresar la letra correcta, enter para pasar al otro campo.

Es decir todo sin levantar la mano del teclado.

Sdos!

¡Gracias! 

Ese mensaje era el que preguntaba si había forma de personalizar, en vez de que diga "valor de propiedad no válido". 

Muchas gracias por la atención y las respuestas. 

Saludos! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas