Ciertos problemas surgen cuando queremos usar una combobox incrustada en la hoja para desplegar fechas. Veamos este ejemplo: en la hoja tenemos un rango con fechas al que le hemos asignado un nombre (fechas); hemos incrustado un cuadro combinado (combobox) para que el usuario elija una de esas fechas y ésta aparezca en la celda E5. También nos hemos preocupado de darle a E5 el formato de fecha
Al desplegar las fechas esto es lo que veremos
pero al elegir la fecha las cosas se complican
El formato de fecha se ha perdido tanto en la celda ligada como en el cuadro combinado. Lo que vemos ahora es el número de serie que representa la fecha.
Pero si miramos con un poco más de atención veremos que hay un segundo problema. El valor aparece alineado a la izquierda, lo que nos sugiere que se trata de un valor de texto, no numérico. Efectivamente, el valor que pasa de la combobox a la celda es textual. Para remediar esta situación tendremos que programar un evento de la combobox.
El código del evento debe ir en el módulo de la hoja que contiene el cuadro combinado. Podemos acceder al módulo desde el editor de Vba seleccionando el objeto Sheet correspondiente
o seleccionando la combobox en la hoja y seleccionando Ver Código en el menú contextual (para poder seleccionar el objeto debemos activar la opción Modo Diseño en Programador-Controles)
En el módulo ponemos este código
Private Sub ComboBox1_Change()
ComboBox1.Value = CDate(ComboBox1.Text)
End Sub
Ahora veremos el formato adecuado en la celda y en el cuadro combinado. Pero si prestamos atención veremos que el valor sigue siendo texto.
Si no queremos realizar ninguna operación con el valor que pasamos a la celda ligada, podemos terminar aquí nuestra tarea. Pero en caso contrario tendremos que convertir el texto en valor numérico. Recordemos que la celda ligada ya tiene formato de fecha.
Para que esto suceda agregamos una línea de código en el evento
Private Sub ComboBox1_Change()
ComboBox1.Value = CDate(ComboBox1.Text)
Range(ComboBox1.LinkedCell).FormulaR1C1 = CDate(ComboBox1.Text)
End Sub
Con este código el valor en la celda ligada será numérico.
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.
Hola Jorge,
ResponderBorrarUn gusto saludarte, una consulta me gustaría saber como se puede hacer el ComboBox dinámico, osea ingresar una fecha y automáticamente aparezca en el ComboBox ya que éste no es dinámico ingreso una fecha y no aparece tengo que cerrar excel y luego abrir de nuevo para que aparezca.
de antemano gracias
Atentamente
Anabel
Suponiendo que te refieres a la combobox Activex, tienes que definir la propiedad ListFillRange con un rango dinámico. Si no estás familiarizada con las técnicas para crear rangos dinámicos te sugiero que mires veas las notas sobre el tema en mi blog (apretando el enlace Rangos Dinámicos en la nube de etiquetas).
ResponderBorrar