Control de Calendario Desplegable en Excel

Posted on lunes, noviembre 17, 2014 by Pedro Wave

Reto de un nuevo Calendario Desplegable

El reto esta vez ha sido crear un Calendario Desplegable sin necesidad de manejar las APIS de Windows, porque en Excel 2010 y 2013 no está disponible el complemento "Control de calendario" y no quería tener que habilitar el control de calendario para Microsoft Excel 2010 de versiones anteriores.

Se puede ver en cualquier celda con el botón derecho del ratón o en las celdas de las columnas que tienen "*FECHA*" en la primera fila o, sabiendo algo de macros en VBA, seleccionar el rango de celdas en que se mostrará el Calendario Desplegable.

Este calendario es personalizable sin saber de macros ni VBA pues la imagen del calendario se obtiene de la hoja "CalCon" y las fechas señaladas como días festivos o acontecimientos se escogen en la hoja "CalFechas".


Descarga del Calendario Desplegable

Descarga el fichero desde el icono (Sites Google) o desde el enlace (Microsoft OneDrive)

Control de Calendario PW2.xlsm 


Requisitos del Calendario Desplegable

Los requisitos han sido:
  1. Programar el Control con el uso mínimo de macros VBA, solo para visualizar el Control y los cambios de mes.
  2. Crear el Control únicamente con formas nativas de Excel, ya sean imágenes o controles de formulario y ActiveX.
  3. Calcular y representar gráficamente el calendario usando las fórmulas de Excel.
  4. Mostrar el mes de la fecha de la celda activa.
  5. Controlar la modificación de la fecha de celdas activas protegidas.
  6. Cambiar fácilmente el mes y año mostrados.
  7. Retornar rápidamente al día actual o al día de la celda activa.
  8. Sombrear el día seleccionado a la vez que se cambia en la celda activa.
  9. Mostrar el número de semana comenzando en domingo o lunes y según ISO 8601
  10. Cambiar el zoom del Control. (Botones: < 0 >)
  11. Orientar el Control para que se muestre lo mejor posible alrededor de la celda activa.
  12. Incluir fechas de festivos coloreadas y generadas automáticamente, por ejemplo calculando la Semana Santa.

Más requisitos del Calendario Desplegable

18-11-2014: He añadido algunas características adicionales al control de este calendario para facilitar su uso que se pueden ver en esta imagen animada:
  1. Marcar los días por los que pasa el cursor.
  2. Controlar si se marcan los días por los que pasa el cursor. (Botón: o)
  3. Controlar si se muestran todos los días. (Botón: x)
  4. Controlar el número y el tipo de semana: la semana comienza en lunes o domingo. (Botón: w)
  5. Copiar el control a una hoja existente o nueva. (Botón de la hoja "CalCon": "Copia la forma del Control en una hoja")

Vídeo del Calendario Desplegable

En el vídeo se puede ver cómo hacer para incluir la forma agrupada en cualquier hoja, sea nueva o existente, y cómo copiar las macros de la hoja "CalTest" o "CalFechas" a la nueva hoja para que se despliegue el Calendario.



Habilitar el viejo Calendario Desplegable

Si después de conocer mi nuevo Control de Calendiario aún quieres habilitar el control de Excel 2007 en las siguientes versiones, puedes leer el siguiente soporte de Microsoft, conociendo que en Windows de 64 bits no funciona el viejo Control: Habilitar Control de calendario y DatePicker para Microsoft Excel 2010


12 Response to "Control de Calendario Desplegable en Excel"

.
gravatar
Pedro Wave Says....

No será para tanto Gerson. Simplemente he intentado satisfacer una necesidad que se me había planteado y que espero te sirva y ayude a otros.

.
gravatar
Heiner Says....

Hola.
Me encanta tu calendario desplegable pero no lo he podido hacer funcionar. Como hago para que me funcione en cualquier hoja de trabajo de Excel 2013 , o en otras palabras como hago para activar la macro que lance el calendario.
Gracias y discúlpame pero soy algo poco diestro en el manejo de Excel.

.
gravatar
Pedro Wave Says....

Hola Heiner,

1) Copia una hoja con tus datos al fichero con el calendario desplegable.

2) En la hoja "CalCon" presiona el botón que "Copia la forma del Control en una hoja" nueva o existente.

3) Abre el editor VBA, presionando a la vez estas dos teclas: Alt y F11

4) Copia las macros de la hoja "CalFechas" a la hoja anterior.

Mira el vídeo a partir de los 50 segundos en donde está explicado todo esto.

Un saludo.

.
gravatar
yurguenpt Says....

me encanta tu calendario! ha sido de gran ayuda! solo tengo una duda y quisiera ver si podrias ayudarme, En una hoja en la que pegue el codigo de VBA al darle doble click izquierido a cualquier celda se activa el calendario. Pero quisiera que solo se active en una columna en especifico. Como podria hacer esto?

.
gravatar
Pedro Wave Says....

Hola yurguenpt, para activar el calendario en una columna específica deberás modificar los eventos de la hoja, cambiando el número de columna 3 por la que quieras para que haciendo un sólo click se muestre el calendario.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 And Target.Column = 3 Then
ControlCalVisible
Else
ActiveSheet.Shapes.Range(Array("ControlCal")).Visible = False
End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub

En este caso se puede borrar totalmente esta última macro Worksheet_BeforeDoubleClick o puedes darle la vuelta al código y que sea el código de Worksheet_SelectionChange el de la macro de doble click tal como pretendes.

Un saludo.

.
gravatar
Sergio Ortega Martín Says....

A mi me pasa lo mismo que a yurguenpt, no se como hacer para que solo me salga el calendario en las celdas que yo quiera. Me aparece en todas las celdas en las que clickeo y yo no quiero eso! He copiado la macro de la hoja de CalFechas en la hoja nueva y me queda esto:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Target.Cells.Count = 1 And Target.Row > 1 And _
UCase(ActiveSheet.Cells(1, ActiveCell.Column)) Like "*FECHA*" Then 'Condición para mostrar el Control
'Not Application.Intersect(ActiveCell, ActiveSheet.Range("B:B")) Is Nothing Then
ControlCalVisible 'Al seleccionar una celda se chequea la visibilidad del Control.
Else
ActiveSheet.Shapes.Range(Array("ControlCal")).Visible = False 'Oculta el Control
End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
If Target.Cells.Count = 1 Then ControlCalVisible 'Al seleccionar una celda se chequea la visibilidad del Control.
End Sub

Private Sub ImageControlDays_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'
ControlCalSet X, Y 'Click en el rango de los días del Control.
End Sub

Private Sub ImageControlDays_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'
ControlCalPos X, Y 'Selecciona los días del mes al mover el cursor.
End Sub

* No se que tengo que modificar en esa macro :(

.
gravatar
Pedro Wave Says....

Sergio, lee el comentario número 6 donde indico cómo hacer para que salga el calendario en una columna determinada. Gracias por tus comentarios.
Un saludo.

.
gravatar
Juan Manuel FABREGUES Says....

Hola pedro, gracias x su aporte. Necesito saber como hacer o conseguir un calendario donde me muestre los vencimientos que yo cargue en una hoja aparte de ecxel con nombre abreviado por dia e importe a pagar por dia de vencimiento. Se entiende?

.
gravatar
Mauricio Godoy Says....

Hola Pedro...!!!!
Es fantástico tu trabajo. Felicitaciones....!!!!.
¿Puedo hacer que el calendario interactivo aparezca dentro de un formulario tras hacer un click en un botón del mismo?
Nuevamente, felicitaciones por tu magnífico trabajo.-

.
gravatar
gjaviersegura Says....

Muy explicativo y util en mi trabajo, gracias por el aporte, me satisfacería si se concretiza el comentario 11.

Leave A Reply

Dime si te gusta lo que lees y, si no te gusta, dime por qué. Tengo habilitada la moderación de comentarios. Tu comentario se publicará pronto.

Tell me if you like what you read here and if you don't like, tell me why. I've enabled comment moderation. Your comment will be published ASAP.

Mi Lista de Blogs- My Blog List