Podemos también crear listas desplegables usando el control cuadro combinado (ComboBox). Pero en ese caso tendremos que usar técnicas un poco distintas de las que mostramos ayer.
Empecemos por señalar que hay dos tipos de controles: los de la barra de formularios y los ActiveX (tema que ya fue tratado en este blog). Los controles de la barra de formularios son fáciles de usar pero no pueden ser programados. Los ActiveX al poder programarlos son más flexibles, pero requieren un poco más de conocimientos.
Siguiendo con el ejemplo de la nota anterior, veremos cómo implementarlo con ambos tipos de controles.
Cuadro combinado de la barra de formularios.
Empezamos por crear las tres macros en un módulo común del editor de Vba
Sub dia()
MsgBox "Buenos dias"
End Sub
Sub tarde()
MsgBox "Buenas tardes"
End Sub
Sub noche()
MsgBox "Buenas noches"
End Sub
Luego creamos una lista con los nombres de las macros y le asignamos un nombre (en este caso usamos el cuadro de nombres para crearlo)
El próximo paso es pegar el cuadro combinado y definir sus propiedades. En la pestaña Programador
Una vez creado abrimos el menú de propiedades del control apretando el botón derecho del mouse.
En el rango de entrada ponemos el nombre que se refiere al rango con la lista de macros y en la casilla de vincular con celda ponemos alguna celda, no necesariamente en la misma hoja y no necesariamente visible
Ahora podemos ver que al elegir la opción "dia", la celda vinculada recibe el valor 1 (ya que "dia" es el primer elemento de la lista). Si elegimos "tarde" la celda vinculada recibe el valor 2.
El paso siguiente es crear una macro lo que haremos abriendo el menú contextual del control (clic con el botón derecho) y eligiendo la opción Asignar macro y apretando el botón Nuevo
En el editor de Vba veremos que Excel ha creado una macro, sin código en esta etapa
En esa macro ponemos este código
Sub Listadesplegable1_AlCambiar()
Dim intCaseSel As Integer
intCaseSel = Range("C8")
Select Case intCaseSel
Case 1: Call dia
Case 2: Call tarde
Case 3: Call noche
End Select
End Sub
Cada vez que un valor del cuadro combinado es elegido, la instrucción Select activa la macro correspondiente según el valor de la celda vinculada al control.
Cuadro combinado ActiveX
Empezamos seleccionando el cuadro combinado de los controles ActiveX
y pegándolo en algún lugar de la hoja. En el momento en que terminamos de pegar el control, la hoja pasa al modo "Diseño", lo que nos permite definir las propiedades del control. Abrimos el menú de propiedades (no el de formato!) y definimos el rango de los valores de la lista (ListFillRange)
En el próximo paso abrimos el menú Ver código. Excel crea un evento Change para el control,
donde ponemos este código
Private Sub ComboBox1_Change()
Application.Run ComboBox1.Value
End Sub
Nótese que el código está en el módulo de la hoja que contiene el control. El evento usa el método Run con el valor elegido en el cuadro combinado (ComboBox1.Value) para activar la macro adecuada.
Todo sobre listas desplegables en Excel, técnicas avanzadas y descarga gratuita de ejemplos en la Caja de Herramientas Excel - Listas Desplegables de JLD. Ver la nota o ir a la página de descarga de la guía.
Jorge
ResponderBorrarExcelente tus dos formas de resolver un mismo problema
Te pasastes
Gracias
Hugo
Hola Jorge.
ResponderBorrarComo siempre, excelente con tus notas. No me pierdo ninguna de tus notas pues he aprendido un montón con ellas.
He descubierto este blog hace unos días, y es un alivio saber que no soy el único loco de Excel. Qué gusto ser raro entre muchos!!
ResponderBorrarJo_selito,
ResponderBorrarel 20 de mayo de 1996 Microsoft anunció que había màs 30 millones de usuarios de Excel y que tomando en cuenta que Excel fue introducido en 1985, la tasa de crecimiento era de 5 nuevos usuarios por minuto. Haciendo la cuenta desde entoonces hasta ahora, se han sumado por lo menos otros 38 millones de usuarios. Si agregamos los que usan copias de otros y versiones "non-sancti", digamos que nos acercarìamos a los 100 millones.
Como verás, hay muchos raros!
Bien, me quedé corto! En una nota de julio de este año Microsoft declara que hay más 500 millones de usuarios Excel en el mundo. Supongo que sabrán lo que dicen...
ResponderBorrarERES EL MAXIMO, ME HE TIRADO MAS DE UN MES BUSCANDO ESTO , MUCHAS GRACIAS
ResponderBorrarHola,
ResponderBorrarTengo una pregunta. No entiendo la parte del código que dice: intCaseSel = Range("C8")
¿Por qué Range("C8")? ¿Qué información contiene esta celda?
Lo que pasa es que cuando ejecuto el código no me corre la macro sino que me sale un número correspondiente a la opción que seleccioné.
Ahora que lo mencionas veo que hay un error en la nota. La celda C8 sería la celda vinculada del control, la que contiene el valor elegido (en la imgen de la nota se ve la celda D6). Es resto está expicado en la nota.
ResponderBorrarMuchísimas gracias!!
ResponderBorrarTu post es realmente bueno, me ha ayudado muchísimo
muy bueno m sirvio para excel 2010
ResponderBorrarQue tal Jorge, me gustaría saber si es posible crear una lista en la q despliegue elementos segun lo q se vaya digitando, es decir, si digito AL deberia mostrar ALBERTO o ALMACEN, espero pueda ayudarme, Gracias porr su gentil labor.
ResponderBorrarHola Carlos,
ResponderBorrarfijate en esta nota
Hace semanas buscaba esto! Muchas gracias!
ResponderBorrarUna explicación de gran ayuda!, mil gracias...
ResponderBorrarMuchas gracias, funciona a la perfección.
ResponderBorrar