Español (spanish formal Internacional)

Fermu Website

Home
Cómo Asociar un Calendario a un Campo en Word PDF Imprimir E-mail
Usar puntuación: / 1
MaloBueno 
Escrito por monica   
Lunes, 12 de Febrero de 2007 14:25
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

Trackback(0)
Comentarios (4)Add Comment
NO TENEMOS NINGUN CONTROL LLAM
escrito por Erick, julio 31, 2007
Hola

No se como poder instalar esta opcion. dame una manito. Gracias
enviar abuso
vote negativo
vote positivo
Votos: +0
como seria en excel
escrito por german, mayo 23, 2007
buenos dias monica.

Segui los pasos de este documento y me resulto perfecto. GRACIAS.

Me puedes ayudar para hacerlo en excel?

Muchas gracias.

Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
enviar abuso
vote negativo
vote positivo
Votos: +0
Atasco en la programacion
escrito por Maria, febrero 14, 2007
Creo que estoy totalmente atascada Monica te escribí una nota en el foro de Office pero como esta algo atras por si acaso no la ves te pongo otro recadito aqui.
Bien el codigo que tengo que poner asociado al calendario lo entiendo.
Mi problema que cuando pongo el codigo asociado a ThisDocument hay algunas cosas que se me escapan con lo que para mi es mas dificil ver donde esta el fallo.
Bien tengo otra macro asociada al close, ya sabes la que me habias explicado anteriormente.
Ahora cuando cierro la plantilla me sale que debo depurar la accion siguiente

Private Sub Document_Close()

Aunque me parece que hay mas cosas que estan mal porque por ahora el calendario no sale por ninguna parte.

Aqui el rollo ha sido mayor, lo siento, pero como veo que tienes mucha paciencia me anima a planteartelo.
Muchas, muchas, muchas gracias por todo
[smiley=tongue]
enviar abuso
vote negativo
vote positivo
Votos: +0
sin "control calender"
escrito por María, febrero 12, 2007
Hola Mónica
No Tengo ningún CONTROL llamado CALENDAR y tengo el Office 2003. Así que si no me hechais una mano no puedo hacer nada. Gracias de nuevo ;-).

Si através de aquí no logro contactar te envio el mensaje por el foro, veo que no te olvidas de nada.
Besos
enviar abuso
vote negativo
vote positivo
Votos: +0

Escribir comentario
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
más pequeño | más grande

busy
Actualizado ( Lunes, 12 de Febrero de 2007 19:22 )
 
Web www.fermu.com

Autentifícate



Gente Online

Tenemos 553 invitados y 2 miembros conectado
Joomla Templates by JoomlaShack