jueves, 24 de noviembre de 2011

Poner el control Calendario en un fomulario

Ya hemos visto cómo poner el control Calendario en una hoja; vamos a estudiar otra variante que consiste en ponerlo en un formulario. Insertaremos un botón para lanzarlo, que necesitará unas cuantas líneas de código en Visual Basic. Una vez terminado el ejercicio, la hoja se verá de la siguiente manera:

El calendario no estará visible hasta que pulsemos el botón. En ese momento se mostrará el formulario, elegiremos la fecha, que se escribirá en la celda C2, y podremos cerrarlo.

Entramos en VBA (Visual Basic para Aplicaciones) pulsando Alt + F11 e insertamos un formulario accediendo a Insertar + UserForm.

El Formulario está identificado con el número 1. El Cuadro de herramientas (número 2) contiene los controles que hay que incorporar al formulario; por defecto, se muestran los controles de la imagen, pero se pueden añadir más. La ventana número 3 es el Explorador de proyectos; si no está visible, hay que pulsar el icono número 5. La Ventana de Propiedades (número 4) permite poner las propiedades que queramos a los controles incorporados en el formulario; si no está visible, tendremos que pulsar el icono número 6.

Hacemos clic en el formulario para asegurarnos de que esté seleccionado y, en la Ventana de Propiedades, ponemos los siguientes valores:
  • (Name): frmCalendario
  • Caption: Calendario
  • Height: 204,75
  • Width: 261,75
  • Left: 50,25
  • Top: 200,25
Volvemos a hacer clic en el Formulario. En el Cuadro de herramientas no está el control Calendario; debemos añadirlo a la lista de controles para poder utilizarlo.

Hacemos clic con el botón derecho en el Cuadro de herramientas y, en el menú contextual, elegimos Controles adicionales. Marcamos Control de calendario 11.0 y pulsamos Aceptar.

El control calendario se ha incorporado a la lista del Cuadro de herramientas.

Arrastramos el nuevo control desde el Cuadro de herramientas hasta el Formulario y le ponemos las propiedades siguientes:
  • (Name): CCalendario
  • Height: 174
  • Width: 246
  • Left: 6
  • Top: 6
  • (Personalizado): Aquí se puede cambiar el formato, fuentes, colores...
Pulsamos F7 para entrar en el Editor de código y escribimos los procedimientos siguientes:

El siguiente paso consistirá en insertar un módulo para escribir el procedimiento que lanzará el formulario. Accedemos a Insertar + Módulo y, en el Editor de código, escribimos:

Salimos de VBA pulsando Alt + Q.

Ya estamos de vuelta en nuestra hoja de cálculo. Necesitamos lanzar el formulario de alguna manera. La forma más sencilla es poniendo un botón en la hoja y asociándolo al formulario. Podemos utilizar el botón del cuadro de Controles de formulario o una autoforma. Vamos a usar la segunda opción.

Accedemos a Insertar + Formas + Rectángulo redondeado y dibujamos un rectángulo en la hoja.

Arrastramos el tirador (rombo amarillo) hacia la derecha para redondear los laterales.

En Herramientas de dibujo + Formato, abrimos la lista de formatos en el grupo Estilos de forma y elegimos el que más nos guste. Arrastramos la autoforma a la posición deseada, escribimos en su interior la palabra Calendario, la centramos horizontal y verticalmente, elegimos el tipo de letra, etc. En el menú contextual elegimos Asignar macro.

En el cuadro de diálogo, seleccionamos Lanzar_Calendario y pulsamos Aceptar.

Sólo falta guardar el ejercicio y probarlo. Cuando un libro de Excel 2010 contiene macros, es necesario guardarlo con extensión .xlsm; para ello, accedemos a Archivo + Guardar como; en Nombre de archivo ponemos el que queramos y en Tipo elegimos Libro de Excel habilitado para macros (*.xlsm).

Descargar archivo (S85-Calendario.xlsm)

Descargar archivo (S85-Calendario.xls)


4 comentarios:

  1. mmmm esta bueno..pero no me deja lanzar el calendario

    sale:

    Error de Compilacion..error e sintaxis

    ResponderEliminar
  2. no me aparece la extencion de calendario me podes decir que hago?

    ResponderEliminar
  3. Muy bueno pero me gustaria indicaras como ponerle la fecha inicial por decirlo así al día actual, ya que por medio de la función Value no me lo permitió.
    Gracias.

    ResponderEliminar