Este artículo pertenece a nuestra serie dedicada a UserForms. Si es el primero que has visto, te sugiero iniciar por la primera entrega: Introducción a UserForms

Artículo anterior: UserForms | Controlar el ingreso de datos (Valores numéricos)

En la continuación de nuestra serie de artículos dedicados a UserForms, vamos trabajar sobre la integridad de nuestros datos, controlando el tipo de ingreso que un usuario puede hacer sobre los distintos campos de texto.


En la sección anterior de nuestra serie de UserForms, descubrimos cómo podemos controlar un formulario para lograr que un campo de texto acepte únicamente valores numéricos, permitiéndonos que los datos sean cargados a la base de datos siempre del mismo modo evitando errores.

Ahora, te presentaré los códigos que te ayudarán a dominar los ingresos de textos, y que te permitirán limitar la cantidad de caracteres de un TextBox, así como imponer el uso de mayúsculas en el inicio o todo el contenido del TextBox.

Limitar la cantidad de caracteres que admite un TextBox

¡Este paso es bastante sencillo!

Supongamos que deseamos controlar que la extensión del texto introducido en el campo Legajo, nunca exceda los 7 caracteres que venimos utilizando en nuestro ejemplo:


Para lograrlo, simplemente basta con asignar una sencilla propiedad al TextBox. En lecciones anteriores, vimos cómo se hace desde la ventana de Propiedades, dentro del Editor de VBA (¡te invito a que hagas la misma prueba y verifiques por ti mismo/a!). El día de hoy, te propongo un camino alternativo, asignando dicha propiedad mediante código cada vez que se inicializa el formulario. Puede no ser lo más conveniente en todos los casos, pero puede ser una herramienta que te interese conocer.

En este caso, como posiblemente sospeches, el evento que desencadenará la acción será: Private Sub UserForm_Initialize().

El mismo se ejecutará cada vez que un formulario se ejecute en el libro. Ahora, para asignar una propiedad mediante código, hacemos referencia al objeto de orden superior (formulario), y dentro de él, el objeto que deseamos controlar específicamente (el TextBox), y desde luego la propiedad, para asignarle un valor de 7. Para nuestro ejemplo:

Private Sub UserForm_Initialize()

UserFormPractica.txtLegajo.MaxLength = 7

End Sub

Entonces, cada vez que llames al formulario, se asignará esta propiedad y podrás ingresar un máximo de 7 caracteres en el campo Legajo.

Controlar el uso de Mayúsculas en tus TextBox

Supón ahora que quieres que el campo Apellido, se ingrese siempre en mayúsculas, para diferenciarlo del nombre. Esta es una manipulación normal en muchos sets de datos.

Afortunadamente, VBA cuenta con un código específico que nos ayuda a controlar el uso de mayúsculas en un texto, la función UCase, que convierte a su argumento en un texto en mayúsculas.

Para que el usuario no se de cuenta de lo que está ocurriendo con el código, crearemos un evento del tipo Change para nuestro campo txtApellido:

Private Sub txtApellido_Change()

txtApellido = UCase(Me.txtApellido.Value)

End Sub

Con lo que cada vez que se presione una tecla, se desencadenará el evento Change, y con ello será asignado al TextBox el mismo texto, pero en mayúsculas. Desde el punto de vista del usuario, parecerá que tiene Bloq Mayús activado.

¿Y si en lugar de todo mayúsculas, prefieres asegurarte que los usuarios más descuidados ingresen siempre sus nombres con mayúscula inicial y demás caracteres en minúscula, para preservar el formato? El código es parecido, pero haremos uso de la función StrConv (conversión de cadenas), con un parámetro particular llamado vbProperCase (Mayúsculas En Cada Palabra). El código desde luego será parecido al anterior. Ejemplifiquemos con el TextBox Nombre:

Private Sub txtNombre_Change()

txtNombre = StrConv(txtNombre.Value, vbProperCase)

End Sub

Y así de sencillo, hemos logrado controlar que nuestro formulario solo admita datos que cumplan con ciertos requisitos, y nos den mayor robustez en nuestra base de datos.


¡Haz el intento con nuestro libro de pruebas!

Nos vemos en el próximo artículo.