En este artículo veremos como asociar un control OCX que muestra un calendario a un campo, mediante el cual podremos introducir una fecha en nuestros formularios con tan sólo hacer click en dicho calendario. 

Una  manera  para Asociar un calendario a un campo   o a un documento o plantilla de Word, o tablas es creando un Userform de Visual Basic Word:

Para ello os dejo estos pasos a modo de realización de nuestro calendario:

 

1-            Abrimos visual Basic [Alt+F11].

2-            Menú Insertar > UserForm

 

Imagen que nos aparece:

  userform1

 

 3. Nos vamos a Menú Herramientas > y clic en Controles adicionales

La imagen que nos aparece es la siguiente:

Ahí dependiendo del office que utilicemos marcaremos [Calendar Control 10.0 si es office 2002, Calendar Control 11.0 si es office 2003, dependiendo del office macaremos el nuestro] y le damos a aceptar.

 

       controlesadicion

 

NOTA: SI NO TENEMOS NINGUN CONTROL LLAMADO CALENDAR DIRIGANSE A ESTA WEB O DEJEN UN COMENTARIO EN NUESTRO FORO DE OFFICE J PARA OFRECERLES EL ARCHIVO NECESARIO DEPENDIENDO DEL OFFICE INTALADO.

  

Una vez hecho esto veremos que se nos ha añadido un control nuevo en el cuadro de herramientas como muestra la imagen siguiente:

  cuadroher

    

Ahora agregaremos el calendario al Userform de la siguiente manera:

Clic en el nuevo control [rodeado con un círculo rojo en la imagen] y veremos que el puntero del ratón se nos ha convertido como en la imagen siguiente:

userform2

 

Pues bien hacemos clic en el formulario y sin soltar el click del ratón arrastramos hasta ponerlo a una medida que nosotros queramos visualizar, [ya veréis que va cogiendo forma y arreglamos el userform1 y el calendario al tamaño deseado. [Con un click en cualquier parte del userform1 ya queda  seleccionado al igual que con un click en cualquier parte del  calendario] y Por ejemplo nos quedaría algo así:

calform1  

 

Bien ahora vamos a cambiar un poco la imagen de nuestro calendario, empezaremos por cambiar el nombre de Userform1 por ejemplo por << Calendario >> para ello le damos un click en nuestro formulario para seleccionarlo [en la imagen se ve que esta seleccionado nuestro Form, dándole al la barra del titulo ya queda seleccionado] y así ver sus propiedades como en la imagen:

userform1

Esas son las propiedades del Userform1 y podremos modificar su color, tamaño, etc...., como solo vamos a ver el calendario pues solo va ha hacernos falta cambiar su nombre para ello donde dice Caption señalado arriba en la imagen, borramos y a mano ponemos Calendario. [Veremos que  a la vez que escribimos también cambia el titulo del userform1 J ]

 

 

Para cambiar las propiedades del calendario vamos al deplegable [arriba señalado en circulo azul] y un click en donde dice Calendar1 calendar  y veremos que nos ha cambiado esa imagen a las propiedades del Calendario. 

  propcal1

 

Desde esas propiedades podemos cambiar el color [señalado arriba en imagen] y también podemos cambiar el tipo de letra y vista de los números etc..... pero eso es mejor que lo toquéis vosotros para poder así experimentar mejor Smile

 

Una vez tenemos hecho esto, vamos ahora a crear el código para ello:

 

Un clic con el ratón en donde dice Userform1 véase imagen:

  proyproc1

 

Y le damos a clic derecho del ratón y clic en >> Ver código >> :

 

vercodigo

En la ventana de código que se nos abre ahí pondremos el código siguiente:

 

‘---------------------------------------------------------

 

Private Sub Calendar1_Click()

'insertar fecha en posición cursor y cerrar formulario.

    Selection.Text = Format(Calendar1.Value, "dd mmmm yyyy")

    Selection.MoveRight Unit:=wdCharacter, Count:=1

    Unload Me

End Sub

 

 

Private Sub UserForm_Initialize()

'Evalua el Canlendario

 

If IsDate(Selection.Text) Then

        Calendar1.Value = DateValue(Selection.Text)

    Else

        Calendar1.Value = Date

    End If

 

End Sub

‘--------------------------------------------------------------------------------

 

Una vez hecho esto nos vamos a ThisDocument para poner el siguiente código el procedimiento es igual que el anterior:

     vercodigo1

 

 

Y en la ventana que se nos abre colocaremos el siguiente código:

 

Y en la ventana que se nos abre colocaremos el siguiente código:

‘--------------------------------------------------------------------------------

Private Sub CommandButton1_Click()

 

' crear una nueva barra de comandos

Dim MiBarra As CommandBar

Dim Menu As CommandBarPopup

' creacion de la nueva barra de comandos

Set MiBarra = Application.CommandBars.Add("NombreBarra", msoBarTop, False, True)

With MiBarra

.Protection = msoBarNoChangeDock

End With

' agrega un menú a la nueva barra

Set Menu = MiBarra.Controls.Add(msoControlPopup, , , , True)

With Menu

.Caption = "&Calendario" ' lo que se muestra, subrayado la R

End With

' agrega un item al menú

With Menu.Controls.Add(msoControlButton, 1, , , True)

.Caption = "Insertar Fecha" ' lo que se muestra, subrayado la t

.OnAction = "Abrir_Calendario" 'llamo a la macro que me ubica allí

.FaceId = 1033

End With

With Menu.Controls.Add(msoControlButton, 1, , , True)

.Caption = "Eliminar este Menu" ' lo que se muestra, subrayado la t

.OnAction = "Quita_Barra" 'llamo a la macro que me ubica allí

.FaceId = 1035

End With

MiBarra.Visible = True ' muestro la barra personalizada

 

 

   

Set Menu = Nothing

Set MiBarra = Nothing

End Sub

 

Sub Quita_Barra()

 

Application.CommandBars("NombreBarra").Delete

 

End Sub

Sub Abrir_Calendario()

 

    UserForm1.Show

 

End Sub

 
Private Sub Document_Open()

 Dim BotonA, BotonB, BotonC As CommandBarControl

    
     'agregar a menu contextual derecho para cualquier documento normal

    

    Set BotonA = Application.CommandBars("Text").Controls.Add

    

     'Propiedades

    With BotonA

        .Caption = "Calendario"

        .FaceId = 351

        .Style = msoButtonIconAndCaption

        .OnAction = "Abrir_Calendario"

        .BeginGroup = True

    End With

    

     'Agregar a menu contextual para un documento con campos de formulario

    

     Set BotonB = Application.CommandBars("Form Fields").Controls.Add

    

     With BotonB

    

       .Caption = "Calendario"

        .FaceId = 351

        .Style = msoButtonIconAndCaption

        .OnAction = "Abrir_Calendario"

        .BeginGroup = True

     End With

 

  'Agregar a menu contextual para un documento con Tablas

    

     Set BotonC = Application.CommandBars("Table Text").Controls.Add

    

     With BotonC

    

       .Caption = "Calendario"

        .FaceId = 351

        .Style = msoButtonIconAndCaption

        .OnAction = "Abrir_Calendario"

        .BeginGroup = True

    

     End With

 

Set BotonA = Nothing

Set BotonB = Nothing

Set BotonC = Nothing

 

End Sub

Private Sub Document_Close()

 

'Borrar botones del menu contextual a la salida del documento

 

Application.CommandBars("Text").Controls("Calendario").Delete

Application.CommandBars("Form Fields").Controls("Calendario").Delete

Application.CommandBars("Table Text").Controls("Calendario").Delete

 

End Sub

 

‘---------------------------------------------------------------------------------------------

 

Cerramos visual Basic de Word y ya podemos probar nuestro código, para una mayor visualización hemos dejado un archivo que os podéis descargar de aquí

 


Anotación


 

Aquí podemos variar la manera en que queramos que se visualice nuestra fecha

Private Sub Calendar1_Click()

'insertar fecha en posición cursor y cerrar formulario.

 

    Selection.Text = Format(Calendar1.Value, "dd mmmm yyyy")

    Selection.MoveRight Unit:=wdCharacter, Count:=1

    Unload Me

End Sub

Exactamente  esta línea de código:

    Selection.Text = Format(Calendar1.Value, "dd mmmm yyyy")

Si ponemos:

"dd mmmm yyyy"  nos pondrá  >>>  11 febrero 2007

"dd-mm-yy" nos pondrá >>> 11-02-07

"dd/mm/yy" nos pondrá >>> 11/02/07

"dd-mmmm-yy" nos pondrá >>> 11-febrero-07

 

Y así con todas las variaciones, y para cualquier duda por aquí andaré Tongue out

 

En nuestra sección de descargas teneis un ejemplo de formulario con todo lo que os hemos explicado en esté articulo  

 

¡Un abrazo!

Mónica