Hojas de cálculo en Excel - página principal

Habilitar y deshabilitar controles de un formulario

Quien haya tenido la santa paciencia de mirarse con detalle el artículo en el que explicaba como calcular préstamos y cuotas de una hipoteca, se habrá dado cuenta que hay algunas cosillas que no he explicado, pero que a simple vista son fácilmente digeribles. Concretamente me estoy refiriendo al hecho de habilitar o deshabilitar controles (cuadros de texto especialmente), dependiendo como interactúa el usuario con el formulario.

En ese artículo al que hacía referencia, podéis ver que hay un apartado para informar de si el préstamo tiene carencia o no. Si no tiene carencia, no tiene sentido completar la información relacionada con la misma, y que se solicita en dos TextBox, concretamente los que hay debajo del ComboBox donde se pregunta si el préstamo tiene carencia, y que corresponden al tipo de interés durante el periodo de carencia, y al número de cuotas de carencia. Parece evidente que no tiene sentido permitir que el usuario introduzca un tipo de interés para la carencia, y un número de cuotas de carencia, si el préstamo carece de esta última, ¿verdad?.

Pues eso es lo que vamos a explicar de una forma muy sencilla, para que no tengáis que investigar a ciegas a través del código de ese artículo sobre préstamos.

Para explicar como funciona esto, lo haremos con un ejemplo sencillo. Lo primero que haremos será crear un UserForm como el que vemos en la siguiente imagen, y que consta de tres Label, un ComboBox, un TextBox, y un CommandButton).


Como curiosidad, y antes de seguir con el tema, para poder escribir varias líneas en el TextBox, debemos cambiar la propiedad MultiLine a true, tal y como se muestra en la siguiente imagen:


Una vez tengamos diseñado el formulario, solo nos quedará incluir el código asociado a los controles. En nuestro caso necesitaremos los tres códigos siguientes. El primero de ellos, corresponde a lo que tiene que suceder al activarse el formulario:


Private Sub UserForm_Activate()
'Si hay errores, que continúe
On Error Resume Next
'al activarse sl formulario, añadimos
'las opciones del desplegable

ComboBox1.AddItem "SI"
ComboBox1.AddItem "NO"
'bloqueamos por defecto el TextBox2,
'si no se ha seleccionado en el desplegable

TextBox1.Enabled = False
End Sub

Como veis, en el código anterior, estamos añadiendo dos elementos (ítems) al ComboBox, y que son las respuestas que el usuario puede seleccionar en el Combo, un SI y un NO. Además, al activarse el formulario, también se deshabilita el TextBox1.

El siguiente código que necesitaremos será el que corresponde al ComboBox, y que se ejecutará al seleccionar alguno de los ítems del desplegable:

Private Sub ComboBox1_Change()
'Si hay errores, que continúe
On Error Resume Next
'activamos o desactivamos el TextBox1
'dependiendo de la respuesta del desplegable

If ComboBox1.ListIndex = 0 Then
'si se elige SI habilitamos el TextBox1
'(el primer valor es cero), lo activamos

TextBox1.Enabled = True
Else
'en caso contrario, si se elige NO habilitar
'el TexBox1, entonces lo desactivamos

TextBox1 = ""
TextBox1.Enabled = False
End If
End Sub

Como veis, se trata del código asociado al ComboBox, de tal manera que si el usuario elige el primer elemento del ComboBox (el ListIndex = 0, porque comienza a numerarse por 0), entonces se habilita el TextBox1 con esa línea donde pone TextBox1.Enabled = True

En caso contrario, si se selecciona el segundo elemento del desplegable (o el 3º, o el 4, o el n, si lo hubiera), eliminaremos el contenido del TextBox1, y además lo deshabilitaremos.

Por último, el tercer código es simplemente para descargar de memoria el formulario, al pulsar sobre el CommandButton:

Private Sub CommandButton1_Click()
'Descargamos el formulario de memoria
Unload Me
End Sub

Esos tres códigos, como ya sabéis, deben ir incluidos dentro del UserForm. El código que a continuación os muestro es el que lanza el formulario, y que podemos asociar a un botón. Este código debe ir en un módulo:

Sub lanzar_userform()
'Lanzamos el UserForm1
UserForm1.Show
End Sub

Como veis es una muy técnica sencilla, y muy útil, que le dará un aspecto más profesional a nuestros formularios:


Desde aquí podéis descargar el fichero de Excel, con el ejemplo que hemos visto en este artículo.



7 comentarios:

Campu dijo...

Javier, ¿sabes si en Word es posible reemplazar texto por una imagen?...
Muchas gracias.

Anónimo dijo...

Hola:

Queria felicitarte por tu blog acabo de entrar y me parece muy interesante y de gran ayuda para las personas que como yo estamos aprendiendo sobre excel
Gracias

Javier Marco dijo...

Muchas gracias por tu comentario :-)

Anónimo dijo...

Hola javier y buenas tardes, quisiera que me ayudes; tengo una hoja horizontal con una serie de numeros (10,12,13,16,etc) en cada una de las celdas del 10 hasta el 97 osea 97 columnas, quisiera tener un formulario que ingrese datos en montos por ejemplo 100.00 y que de la hoja1 llamada PLAN me jale el nª de cuentas y me diga como se llama ese codigo, y tambien que me aparezca una ventana las cuentas que voy ingresando y la fecha correspondiente y que el saldo entre las 2 cuentas sea 0, espero me puedas ayudar

Javier Marco dijo...

Solo puedo aconsejarte que te pases por estos dos artículos, y les eches un vistazo, para adaptarlo a tus necesidades:

Introducir datos utilizando un formulario

Modificar datos utilizando un formulario

Ivan dijo...

hola, te quiero felicitar, eres muy bueno con esto de las macros, hay algun libro que me puedas recomendar?? para aprender macros, es decir programacion VB. muchas gracias, sos genial

Javier Marco dijo...

Hola que tal...

Pues seguro que hay buenos libros sobre macros en excel, pero yo lo poco que sé ha sido utilizando la ayuda de VBA (F1, ya sabes), y algún que otro manual de visula basic, para hacerme con el uso de las funciones básicas.

Un saludo.