Posición del objeto Calendario en una hoja de Excel

sábado, abril 03, 2010

De vuelta mis vacaciones estoy tratando de ponerme al día con las consultas de mis lectores. Lamentablemente no podré responder a todas, pero algunas serán transformadas en notas en el blog. Como la consulta de un lector sobre cómo posicionar el objeto Calendario en una hoja de Excel.

La consulta viene a colación de la nota sobre validación de fechas en Excel que publiqué hace ya casi tres años. Allí mostré como hacer que el objeto Calendario aparezca cuando activamos una celda de un determinado rango.

La consulta de mi lector consiste en cómo lograr que el calendario aparezca siempre a la derecha de la celda activa y no en el centro del área de la hoja que aparece en pantalla. Para lograr esto tendremos que programar la propiedad Position del Userform que contiene el calendario.

Empezamos por descargar el ejemplo de la nota mencionada. Luego activamos el editor de Vba (Alt+F11) y el Userform1. En la ventanilla de las propiedades activamos la pestaña Categorized y vamos al grupo Position



Vemos que tenemos, además del tamaño (Height y Width) la posibilidad de establecer la posición inicial (StartUpPosition)



En nuestro caso vamos a usar la opción 0-Manual. Por supuesto, esto no es suficiente y tendremos que establecer la posición relativa a la celda activa programáticamente.

Activamos el Modulo1 que contiene la rutina "abrir_calendario" y ponemos este código



Sub abrir_calendario()
    With UserForm1
        .Left = ActiveCell.Left + ActiveCell.Width + 25
        .Top = ActiveCell.Top + 75
        .Show
     End With
    
End Sub


El código es bastante obvio y se puede apreciar cómo se controla la posición en relación a la celda activa. Los parámetros "+25" y "+75" nos permiten establecer el grado de desvío.

El archivo se puede descargar gratuitamente aquí.

7 comments:

fredys 07 abril, 2010 00:59  

Buenas tardes Jorge,
Mi nombre es Fredy Arevalo, Desde mis inicios en Excel he estado visitando tu blog y puedo anotar que es lo mejor que se puede conseguir en internet, por tal motivo te felicito y agradezco todo el apoyo que tu nos prestas con tus comentarios.
Aprovechando este mensaje me gustaría que me ayudaras con un ejercicio complejo que tengo en el cual tengo que buscar una fecha maxima en unos datos dependiendo de unos criterios.lo grave es que estos criterios estan varias veces:

Cedula Concepto fecha valor
1232 1300 10/02/2007 15000
1232 1300 11/02/2008 30000
1232 1300 02/10/2009 90000

En este ejercicio debo tomar la cedula el concepto la fecha maxima y el valor de estos.

Agradezco tu apoyo con el tema.

Jorge L. Dunkelman 07 abril, 2010 07:23  

Freddy,
gracias por los conceptos. Este tipo de consultas no tienes que hacerla en el espacio de los comentarios sino directamente por mail, como indico en Ayuda (fijate en la barra superior del blog).

alexxxxxo 12 abril, 2010 08:02  

Querido Jorge:
He seguido tus indicaciones al pie de la letra con relación al calendario y su posición con respecto a la celda activa, pero sabes... he cambiado el rango para la celdas, hasta "a150" por lo que mi programa ha quedado así:

Sub abrir_calendario()
With UserForm1
.Left = ActiveCell.Left + ActiveCell.Width + 25
.Top = ActiveCell.Top - 175
.Show
End With

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngFechas As Range
Set rngFechas = Range("a2:a150")
If Union(Target, rngFechas).Address = rngFechas.Address Then _
Call abrir_calendario

End Sub
Private Sub Class_Initialize()

End Sub

EL PROBLEMA que surge es que cuando llego a un numero de celda superior al 20, más o menos, el calendario va apareciendo cada vez más abajo de la celda activa, así que cuando llego por la "a40" el calendario ha desaparecido, es decir esta por debajo de la barra de tareas y entonces ya ni puedo capturar la fecha, porque no veo el calendario, y no puedo cerrar el programa, así que tengo que recurrir al administrador de tareas para cerrar excel, podrías checar a que se debe el problema?
Te lo agradecezco de antemano.

Jorge L. Dunkelman 13 abril, 2010 21:17  

Después de estudiar un poco el problema te sugiero usar este código

Sub abrir_calendario()
With UserForm1
.Left = ActiveCell.Left + ActiveCell.Width + 25
.Top = ActiveCell.Row + 150
.Show
End With

End Sub

La única diferencia está en la definición de la propiedad Top

Prof. Rene Dominguez 27 junio, 2010 11:53  

Ya segui tus instrucciones pero igual no logro que el calendario aparezca a la para de todas de las celdas, mas de las que estan proximas a la parte superior.

Prof. Rene Dominguez 27 junio, 2010 12:15  

Yo tengo el rango de celda hasta el A40, al selecionarla el calendario no se visualiza, pero si se esta ejecutando.

Jorge L. Dunkelman 30 junio, 2010 11:37  

Para que aparezca a la para de la celda activa, no hay que definir la posición del calendario. De esa manera aparece siempre en el centro del área visible de la hoja.

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP