miércoles, marzo 16, 2011

Usar el control Calendario en Excel 2010

En el pasado, en aquellos lejanos días de Excel Clásico (97-2003), mostramos en este blog las bondades de usar el control Calendario (Mscal.ocx) y también como validar fechas con el control.

Las malas noticias para los que empiezan a trabajar con Excel 2010 es que el control ha sido removido del paquete de Office.

Microsoft comenta el tema en esta nota diciendo:

El control Calendar (mscal.ocx) […] fue removido de Access 2010 y no se puede utilizar en Excel 2010. En cambio, los usuarios pueden utilizar el Date Picker o sus propios controles de calendario personalizado.

El Date Picker se encuentra en la colección de controles ActiveX



Una segunda posibilidad es usar controles o complementos de terceras partes. Personalmente puedo recomendar el complemento desarrollado por Sam Radakovitz. Todo la que hay que hacer es descargar el complemento en la nota que Sam publicó el blog de Microsoft Office y copiarlo en la carpeta XLSTART (por ejemplo: C:\Program Files\Microsoft Office\OFFICE14\XLSTART).

Una vez instalado el complemento aparecerá en la cinta en la pestaña Complementos



El complemento hace que el calendario aparezca en toda celda que contenga una fecha o en la celda inmediata inferior.
También aparece en la celda que se encuentre debajo de una que contenga la palabra “Date” (fecha, en inglés. No, no funciona con Fecha en castellano) o desde el menú contextual que se abre con un clic del botón derecho del mouse



Existe una tercera posibilidad: instalar el control Calendario de Excel Clásico (Mscal.ocx) para utilizarlo en Excel 2010. Esta posibilidad es válida para la versión 32 Bit de Excel 2010.

El control puede descargarse en fonstuff o mejor aún en la página de descargas de Graham Mayor (buscar el MSCAL.ZIP).

Para poder usar el control hay que copiar el archivo MSCAL.OCX en C:\Windows\System32 y registrarlo. Para registrarlo hacemos un clic a Start (Inicio) y en Run copiamos “regsvr32 mscal.ocx” en



Apretamos OK y veremos esta mensaje



Ahora el control aparecerá en la colección de controles ActiveX

lunes, marzo 07, 2011

Correo basura (spam) enviado desde mi cuenta

Acabo de detectar que en las últimas 48 horas han sido enviados correos basura (spam) desde mi cuenta de Gmail. Por supuesto, estos mails han sido enviados sin mi consentimiento. Estoy intentando tomar medidas para que ésto ni vuelva a repetirse.
En ningún caso hay que activar ningún enlace que aparezca en el mail.

Lamento cualquier incoveniente que esta situación pueda haber generado.

martes, febrero 22, 2011

Listas desplegables con valores dependientes

Supongamos que queremos crear un formulario en Excel con dos celdas: hora de comienzo y hora de finalización. Las horas las elegimos de celdas desplegables, que creamos fácilmente con validación de datos. Pero en nuestro modelo queremos que las horas que aparezcan en la la celda “hora de finalización” dependan de la hora elegida en la celda “hora de comienzo


Para lograr que la lista desplegable de la celda “Hasta” se adapte a la hora introducida en la celda “De” tenemos que usar rangos dinámicos que crearemos con la función DESREF.

Los pasos para crear este modelo:



En el rango A3:A26 definimos las horas del día (en este ejemplo usamos una escala de una hora, pero podemos usar medias horas o cualquier otra escala). Definimos el nombre “rngHorarioSencillo” que se refiere a este rango.

Definimos el nombre “celdaDeSencillo” que se refiere a la celda E4.

En la celda C8 ponemos la fórmula

=COINCIDIR(celdaDeSencillo,rngHorarioSencillo,0)

y creamos el nombre “controlHora2Sencillo” que se refiere a la celda C8. Como alternativa podemos crear un nombre que contenga la fórmula en lugar de ponerla en una celda. En mi opinión, el uso de celdas nos permite crear modelos más claros y fáciles de administrar.

Para crear la lista desplegable de la celda “De” usamos el nombre “rngHorarioSencillo”



Para crear la lista desplegable en la celda “Hasta” usamos un rango dinámico definido por esta fórmula:

=DESREF(sencillo!$A$3,controlHora2Sencillo,,CONTARA(rngHorarioSencillo)-controlHora2Sencillo)

Otro detalle que podemos agregar es un evento que borre el contenido de la celda “Hasta” cuando cambiamos el valor de la celda “De”. En el módulo Vbe de la hoja ponemos este código

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("celdaDeSencillo").Address Then
        Target.Offset(0, 1).ClearContents
    End If
End Sub



Finalmente ocultamos las columnas A y B.


Un caso más complejo es cuando queremos que el modelo incluya varias líneas donde la hora de comienzo de una línea depende de la hora de finalización de la línea anterior


En este caso emplearemos prácticamente la misma técnica, pero en lugar de celdas de control incluiremos las fórmulas en nombres.

En la primer celda del formulario definimos la lista desplegable con el nombre “rngHorario”, que se refiere a todo el rango de horas



Ahora tenemos que definir los controles para las celdas “De” y “Hasta”. En el caso de “De” tenemos que referirnos a la celda “Hasta” inmediata anterior (la que se encuentra una fila por arriba). Esto lo hacemos definiendo la fórmula en un nombre pero asegurándonos que la referencia a la fila sea relativa (sin el signo $).

Al definir el control para el campo “De” seleccionamos la celda D5 y definimos el nombre “hora1Ref” con esta fórmula

=COINCIDIR(complejo!$E4,rngHorario,0)

Para definir el control para el campo “Hasta” seleccionamos previamente la celda E4 y definimos el nombre “hora2Ref” con esta fórmula

=COINCIDIR(complejo!$D4,rngHorario,0)

Estos controles nos sirven ahora para definir los rangos dinámicos de las listas desplegables.

Para las celdas D5:D9 definimos el nombre “rngHora1Comp” con la fórmula

=DESREF(complejo!$A$3,hora1Ref,,CONTARA(rngHorario)-hora1Ref)

Para las celdas E4:E9 definimos el nombre “rngHora2Comp” con la fórmula

=DESREF(complejo!$A$3,hora2Ref,,CONTARA(rngHorario)-hora2Ref)

El archivo con el ejemplo puede descargarse aquí.

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.