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 (Google Drive) o desde el enlace
(Microsoft OneDrive)
Control de Calendario PW2.xlsm
Requisitos del Calendario Desplegable
Los requisitos han sido:
-
Programar el Control con el uso mínimo de macros VBA, solo para
visualizar el Control y los cambios de mes.
-
Crear el Control únicamente con formas nativas de Excel, ya sean
imágenes o controles de formulario y ActiveX.
-
Calcular y representar gráficamente el calendario usando las fórmulas de
Excel.
- Mostrar el mes de la fecha de la celda activa.
-
Controlar la modificación de la fecha de celdas activas protegidas.
- Cambiar fácilmente el mes y año mostrados.
- Retornar rápidamente al día actual o al día de la celda activa.
-
Sombrear el día seleccionado a la vez que se cambia en la celda activa.
-
Mostrar el número de semana comenzando en domingo o lunes y según
ISO 8601
- Cambiar el zoom del Control. (Botones: < 0 >)
-
Orientar el Control para que se muestre lo mejor posible alrededor de la
celda activa.
-
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:
- Marcar los días por los que pasa el cursor.
-
Controlar si se marcan los días por los que pasa el cursor. (Botón: o)
- Controlar si se muestran todos los días. (Botón: x)
-
Controlar el número y el tipo de semana: la semana comienza en lunes o
domingo. (Botón: w)
-
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
17 Response to "Control de Calendario Desplegable en Excel"
Impresionante Pedro... eres un genio!
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.
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.
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.
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?
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.
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 :(
Hola, muy bonito el calendario
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.
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?
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.-
Muy explicativo y util en mi trabajo, gracias por el aporte, me satisfacería si se concretiza el comentario 11.
Oye Amigo por caso buscando un calendario me encontré con el suyo excelente la forma que lo realiso, voy a probarlo aunque ya pasaron varios anos.
PREGUNTA: Cuando le dedica un update a office2016 y sobre todo un video explicativo como lo realiSo con voz claro esta.
GENIAL MUCHAS GRACIAS, ESTARE PENDIENTE
una macro para insertar icono pdf en la en cada celda de Excel
Necesito una macro para insertar un icono pdf en cada celda en Excel
Hola Pedro, te escribo de Colombia. Antes que nada, mil felicitaciones por tú trabajo y sobre todo por compartirlo con nosotros. Ya logré que se ejecute solo desde la columna 10 en adelante, modificando el código y otras cositas. Pero ahora cuando selecciono una fecha en el control emergente, no me queda la fecha seleccionada en la celda.Me ayudas por fa? de antemano, Mil Gracias.
Hola se que es post es muy viejo del 2014 pero esta acelente este calendario funciona perfectamente excel2019 64x mi pregunta es :
deseo que solo se lea en una unica celda ejemplo B10 SOLO EN ESA CELDA
Leave A Reply
Indícame las erratas que encuentres y qué es lo que te gustaría ver en los próximos artículos.