Calendario en celda Excel

Compatibilidad: Excel 365 2021 2019 2016

Para insertar fechas creamos un formulario con un calendario que permita seleccionar la fecha deseada en la celda activa (Control de calendario Excel).

Los controles ActiveX son pequeños programas, denominados en ocasiones complementos o referencias, que nos permite mostrar un interfaz para realizar una tarea. En nuestro caso emplearemos el control de calendario de Microsoft MSCAL.ocx.

El control calendario depende del archivo "MSCAL.OCX" Si Excel 2016 o 2013 se instala desde una versión anterior se encontrará disponible. Si se instala de nuevo sin actualización ya no se encuentra disponible. El control se incluye desde la versión 2.0 y estaba pensado para Microsoft Access.

Podemos copiar el archivo de otro equipo o de una fuente de confianza e instalarlo en nuestro ordenador: C:\Windows\System32 o C:\Windows\SysWow64.

Sobre la celda deseada podemos insertar una fecha sin necesidad de escribirla.
Calendario en celda Excel: Hoja Excel con calendario para insertar fecha en celda activa
  • EDITOR VISUAL BASIC. Abrimos el editor de Visual Basic.
  1. Abrir el libro deseado / Guardar con la extensión *.xlsm. Libro habilitado para macros.

  2. Pulsar la tecla Alt y mantener pulsada / Pulsar la tecla F11. Mostrará el editor de Visual Basic.

  • INSERTAR FORMULARIO
  1. Ir a: Barra de menús / Insertar / UserForm. Insertará un formulario vacío.

    UserForm insertado como objeto
  2. PROPIEDADES USERFORM. Mostrar ventana de propiedades, si no está visible. Ir a: Barra de Menú / Ver / Ventana Propiedades; O Ir a: Barra de Herramientas Estándar / Botón: Ventana de propiedades; O Atajo Teclado: F4; Mostrará la ventana de propiedades.

  3. Ir a: Ventana Propiedades / Clic Ficha Alfabética. Muestra las propiedades en orden alfabético.

  4. Aplicar los valores a la propiedad UserForm:

    PropiedadValor
    NameMi_Formulario
    CaptionCalendario
    Height165
    Width225
  • CONTROL: DE CALENDARIO
  1. Ir a Panel: Cuadro de Herramientas / Botón derecho del ratón / Controles adicionales. Mostrará ventana de controles.

    Ventana de controles adicionales: Control de calendario
  2. Activar la casilla: Control de calendario 12.0. O la versión disponible.

  3. Pulsar el botón Aceptar. Cierra ventana e inserta el control en el cuadro de herramientas.

  4. Ir a: Cuadro de herramientas / Clic sobre el Control de calendario. Activamos el control para insertarlo en el formulario.

    Panel de cuadro de herramientas
  5. Ir al Formulario / Clic en el interior. Insertará el control de calendario.

    Control Calendario insertado en el formulario
  6. Ir a: Ventana Propiedades / Clic Ficha Alfabética. Muestra las propiedades en orden alfabético.

  7. Aplicar los valores a la propiedad del control MonthView:

    PropiedadValor
    NameMi_Calendario
    Height144
    Left0
    Top0
    Width216
  • VISTA DE CÓDIGO DEL USERFORM. Insertamos el código para el formulario.

  1. Ir a: Barra de menús / Ver / Código; O también, Atajo de teclado F7.

  2. Escribir el código 1:

    Option Explicit

    Private Sub UserForm_Initialize()

    If IsDate(ActiveCell.Value) Then

    Mi_Calendario.Value = DateValue(ActiveCell.Value)

    Else

    Mi_Calendario.Value = Date

    End If

    End Sub

    - Comprueba si la celda activa contiene una fecha. Si tiene fecha, muestra
    en el calendario dicha fecha, en caso contrario, muestra la fecha actual.

  3. Escribir el código 2: Transfiere la fecha a la celda activa.

    Private Sub Mi_Calendario_Click()

    ActiveCell.Value = Mi_Calendario.Value

    Unload Me

    End Sub

  • INSERTAR MACRO. Permite ejecutar la macro para que muestre el formulario.
  1. Ir a: Ir a: Barra de Menú / Insertar / Módulo. Mostrará la ventana del módulo donde escribimos la macro.

  2. Escribir el código de la macro:

    Sub Muestra_Calendario()

    Mi_Formulario.Show

    End Sub

- Envía la fecha del calendario a la celda activa y cierra el formulario.

  • EJECUTAR PROCEDIMIENTO.
  1. Ir a: Hoja1 del libro Excel / Clic sobre la celda deseada. Mostrará formulario con el calendario.

  2. Ejecutar la macro / Seleccionar la fecha deseada. Insertará la fecha en la celda.

Calendario en celda Excel: Proceso para insertar fecha en la celda activa
Nivel de dificultad: Experto VBA-Macros Excel Experto VBA - Macros

- Consultar:

61 comentarios en “Calendario en celda Excel

    • Hola Abel!! fijate que a mi no me funciona, ya copie el archivo, pero no lo reconoce,, me podrías pasar el procedimiento para copiarlo, tengo excel 2016..

      de antemano, te agradezco....

    • Hola Ana,

      Siguiendo los pasos indicados, no deberías tener ningún problemas. Verifica que los nombres coincidan en el código y los controles. Sí indicas algún detalle concreto podremos ayudarte.

      Saludos,

    • Hola José,

      El control calendario depende del archivo "MSCAL.OCX" Si Excel 2016 o 2013 se instala desde una versión anterior se encontrará disponible. Si se instala de nuevo sin actualización ya no se encuentra disponible. El control se incluye desde la versión 2.0 y estaba pensado para Microsoft Access.

      Podemos copiar el archivo de otro equipo o de una fuente de confianza e instalarlo en nuestro ordenador: C:\Windows\System32 o C:\Windows\SysWow64.

      También puede presentar problemas en macros que llamen al control.

      Saludos.

  • de mucha ayuda me agrado mucho el funcionamiento de esta macro y se presta para poderlo manipular a mi gusto el unico problema que se me presento fue lo del control de calendario no lo tenia pero se soluciono buscando el archivo descargarlo y copiarlo a su carpeta correspondiente

  • se supone que al dar clic en la celda deberia de aparecer el calendario es correcto? tengo ya realizado el calendario lo que no es cuando ya se ejecua en la hoja de excel. podria indicarme el ultimpo paso para poder ver al dar clic en la celda seleccionada

    • Hola Javier,

      Reemplaza el código por el siguiente, cambiando A1 por la celda deseada (En 3 sitios):

      Option Explicit
      Private Sub UserForm_Initialize()
      If IsDate("A1") Then
      Mi_Calendario.Value = "A1"
      Else
      Mi_Calendario.Value = Date
      End If
      End Sub

      Private Sub Mi_Calendario_Click()
      Range("A1") = Mi_Calendario.Value
      Unload Me
      End Sub

      Saludos.

  • HOLA BUENAS TARDES HE HECHO TODOS LOS PROCEDIMIENTOS PERO NO CAMBIA LA FECHA SOLO MUESTRA LA FECHA ACTUAL Y AL POSICIONARME EN UNA CELDA EN PARTICULAR NO MUESTRA EL CALENDARIO. PODRIAS AYUDARME?
    GRACIAS.

  • En herramientas la opcion de "controles adicionales" esta desactivada. No me es posible usar esa herramienta.

  • Hola,
    No piloto mucho pero creo que hay un error en el código 1, debería ser Private Sub Mi_Formulario_Initialize()

    • Hola Jdoval,

      En parte tienes razón, tanto Private Sub UserForm_Initialize() como Private Sub Mi_Formulario_Initialize() es correcto.
      UserForm, es el nombre genérico que aplica Excel internamente y Mi_Formulario es el nombre asignado por nosotros.

      Saludos

  • Solucionado, el error estaba en el evento de Mi_Calendario, en lugar de Click, DateClick. El código 2 quedaría de la siguiente forma:
    Private Sub Mi_Calendario_DateClick(ByVal DateClicked As Date)
    ActiveCell.Value=Mi_Calendario.Value
    Unload Me
    End Sub

  • Buen dia, realice las instrucciones indicando una casilla en especifica para mostrar la fecha, pero cuando selecciono la celda, no me aparece automaticamente el calendario para seleccionar,tengo que ir a macro y ejecutarla. ¿Que estara mal en mi código? Gracias.

  • Hola, yo también tengo que ejecutar la macro manualmente. Funciona todo, pero no está enviando la ejecución cuando haces clic en la celda tipo fecha.

    • Hola Gema,

      Por favor revisa tu código escrito, puedo imaginar que el error se encuentra en la expresión: ActiveCell.Value = Mi_Calendario.Value de la macro Mi_Calendario_Click(); o en el nombre del elemento.

      Saludos.

  • Hola, está muy buena la guía, pero me sucede lo mismo que las personas anteriores, no se me ejecuta la macro al clickear la celda; ya revisé el código varias veces y lo digité tal como dice la guía, qué puedo estar haciendo mal?

    • Hola Valentina,

      El problema es que los nombres que tienes aplicados no coinciden, verifica el código:
      - Vista de código del userform. Punto 3. Mi_Calendario.
      - Control de calendario. Punto 7. Mi_Calendario.
      - Y en el resto del código.

      Saludos.

  • Hola ya cree el calendario y todo ok perfecto, pero cuando envio el libro de excel por correo al cliente, este me dice que le sale error que no encuentra el objeto o la forma. Como hago para que este libro se abra en otros pcs y muestre perfectamente el calendario?, ya he mirado otro archivo con calendarios descargados en internet y se puede ver el calendario pero no se como le hace para que se pueda descargar y ver sin ningun error o que pida activar algun complemento al usuario. Agradezco su ayuda por fa

    • Hola Mercedes,

      Si el libro Excel se lo remites a otro usuario, deberá de tener instalado el control indicado, evidentemente si no lo tiene, no podrá ejecutarse. Depende de la versión de Excel. Se puede insertar como se indica o empaquetar el libro y el control para que se instale.

      Saludos.

  • Hola! buenas tardes!....

    En lo particular me funcionó en excel 2010 con System32.....
    Pero el Excel 2016 con plataforma Syswow64.... no me aparece de ninguna manera...
    Me podrían apoyar...

    Gracias!!!!

  • Esta muy buen, y esta macro como la puedo aplicar para generar fechas DESDE: HASTA: ¿?

    eso es lo que necesito

    Gracias de antemano

  • Hola... me parece ok la pagina !!!
    Tengo un libro con varias hojas, cada una de las hojas es un dia del mes; las tengo nombradas desde la 1 a la 31, pero quisiera que cuando escriba en una selda de la hoja 1 el dia MARTES por ejemplo, el resto de las hojas tomaran su dia de semana correspondiente a el numero de la hoja... Gracias ... si alguien me ayudara..

    • Hola Osvaldo,

      Deberás de aplicar la función DIASEM. Trabajando con el número del día de la semana y aplicarle formato de celda personalizado como dddd.

      En el resto de hojas puedes aplicar A1+1, A1+2, etc. para obtener el día siguiente.

      Saludos.

  • En Visual Basic en las herramientas, controles adicionales no me paarce la opcion de "Control de Calendario", mi excel es 2013

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.