Hojas de cálculo en Excel - página principal

Calendario emergente en Excel

Este artículo nace como respuesta a una consulta de un lector del blog en otro artículo relacionado, donde explicaba como incluir un calendario en un formulario. Concretamente se planteaba la pregunta de si se podía mostrar un calendario emergente en Excel, simplemente cliqueando en una celda.

La respuesta seguro que ya la sabéis, porque sino, no estaría escribiendo este artículo. Pues sí, se puede. En este caso, lo vamos a hacer sin necesidad de incluir el calendario en un formulario. Simplemente haremos que el calendario aparezca, sin más.

Creo que el artículo de hoy os puede ser de mucha utilidad, especialmente si trabajamos con hojas de cálculo en las que tengamos que introducir muchas fechas del mes en curso (del mes en el que estamos), pues con un solo clic en el día del calendario, nos aparecerá la fecha en la celda donde estemos. También lo podemos utilizar para introducir fechas correspondientes a otros meses y/o años, pero ya no será tan rápida la introducción de los datos, pues deberemos realizar más de un clic en el calendario (para seleccionar el mes y/o año, y el día). Puede ser interesante por ejemplo, como complemento llevar el control mensual de cobros y pagos, para hacer un presupuesto diario, o para llevar el control de asistencias del personal, por poner solo tres casos.

Para poder hacer todo esto, lo primero que tendremos que hacer es "dibujar" el calendario. Ojo, con esto de dibujar, me estoy refiriendo simplemente, a darle al calendario las dimensiones que deseemos. Para ello, si usamos Excel 2003, seleccionaremos en Herramientas --> Personalizar --> y en la pestaña de barras de herramientas, seleccionaremos "Cuadro de controles". Una vez hecho esto, nos aparecerá la barra de controles, así que cerraremos la ventana emergente de personalización. Seguidamente, seleccionaremos el icono del final que tiene un dibujillo de un martillo y una llave, y seleccionaremos "Control de calendario 11.0".

En el caso de que utilicemos Excel 2007 y Excel 2010, para mostrar el Cuadro de controles, antes debemos hacer visible la pestaña "Programador". Para ello, nos iremos a Archivo --> Opciones --> Personalizar cinta de opciones --> y pondremos una muesca en "Programador". Una vez tengamos en la cinta de opciones la ficha Programador, dentro de ella, encontraremos el Cuadro de controles, seleccionando "Insertar", cuyo icono es el martillo y la llave.

En el caso concreto de utilizar Excel 2010 es más que probable que no os aparezca el control calendario. Para solucionar este contratiempo, deberéis seguir las instrucciones del comentario que publiqué el 15 de junio de 2011, ante una pregunta de un usuario, y que veréis al final del artículo incluir un calendario en un formulario. Os remito directamente a ese comentario, para no duplicar el contenido.

Aquí tenéis una imagen de Excel 2003, que es la versión que más suelo utilizar:


Una vez tengamos todo listo, y hayamos seleccionado el control calendario, solo nos quedará dibujar el calendario en la hoja de cálculo para que tenga el tamaño que deseemos. Para ello, simplemente deberemos cliquear y arrastrar el mouse, para darle la forma que queramos. Una vez hecho eso, si usamos Excel 2003, pulsaremos en el primer icono de la barra de Cuadro de controles (la escuadra, la regla, y el lápiz), para salir del modo diseño. En Excel 2007 y 2010, simplemente cliquearemos en el icono que hay junto al de Cuadro de controles, con el lápiz, regla y escuadra, para salir del modo diseño. A continuación, cerraremos la barra de Cuadro de controles, pues ya no la vamos a necesitar más.


Una vez hecho esto, solo nos quedará incluir el código de programación, en la hoja donde queramos hacer que aparezca el en cuestión (no en un módulo). Lo que haremos en nuestro ejemplo, será mostrar el calendario siempre que cliqueemos en una celda de la columna A. Da igual que celda sea, pues cuando cliqueemos sobre la columna A, nos aparecerá el calendario.

Muchos estaréis pensando: "pero si ya tenemos visible el calendario, ¿cómo va a aparecer de nuevo cuando cliqueemos en una celda de la columna A?". Bueno, la respuesta es sencilla. Lo que haremos será ocultar el calendario siempre que cliqueemos en cualquier celda que no esté en la columna A, y mostrarlo cuando cliqueemos en cualquier celda de la columna A.

¿Cómo vamos a hacer todo esto?. Pues con un sencillo código que pondremos en el evento SelectionChange. Es decir, un código que se ejecutará al cambiar la selección de la celda. También incluiremos unas sencillas líneas de código para incluir en esa celda (la de la columna A, que ha permitido que el calendario se haga visible), la fecha que seleccionemos en el calendario. Es decir, si cliqueamos en un día del calendario, esa fecha aparecerá el la celda donde estemos situados (esto lo haremos a través del evento Click).

El código del evento SelectionChange de la hoja, será este:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Ejemplo para mostrar el calendario al seleccionar
'cualquier celda de la columna A

If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
'ahora le diremos donde queremos que aparezca el calendario
'para que no se quede fijo en las celdas de arriba, ya que al hacer scroll,
'se nos quedaría oculto en la parte de arriba.
'Podemos jugar con estos valores, para ver donde se muestra
'el calendario, y para que quede a nuestro gusto

Calendar1.Left = Target.Left + Target.Width + 60
'para que no se nos deforme el calendario, si estamos en las últimas filas
'incluimos un condicional que controlará la celda donde estamos y
'la comparará con la última fila de la hoja de cálculo

If ActiveCell.Row + 20 >= Cells.Rows.Count Then
Calendar1.Top = Target.Top - 145
Else
Calendar1.Top = Target.Top - 50
End If
'hacemos visible el calendario
Calendar1.Visible = True
'Mostramos la fecha de hoy
Calendar1.Today
Else
'ocultamos el calendario, en el caso de no
'seleccionar una celda de la columna A

Calendar1.Visible = False
End If
End Sub

Y el del evento Click del calendario será este:

Private Sub Calendar1_Click()
'Al hacer clic en una fecha del calendario
'ponemos el valor en la celda donde estemos situados

ActiveCell = Calendar1.Value
'ocultamos el calendario
Calendar1.Visible = False
End Sub

Con este sencillo código, obtendremos algo tan vistoso como esto, cada vez que nos situemos en una celda de la columna A:


Desde aquí podéis descargar el fichero de Excel, con el ejemplo que hemos visto en este artículo. Si os ha sido de utilidad, espero vuestros comentarios.



63 comentarios:

zmbcvx dijo...

Estupendo me gusta un monton excel aunque me gustaria saber mas pero estas cosillas me satisfacen, pregunto se puede especificar varios rangos en una hoja a la vez.
Saludos

El pilt®afilla - www.3piesalgato.com dijo...

Por supuesto que se puede. Solo tienes que añadir los rangos dentro del condicional "If". Por ejemplo, cambiando la línea del "If" de esta forma que te indico a continuación, aparece el calendario al cliquear en cualquier celda de la columna A, o al cliquear en la celda B4, B5, o B6:

If Not Application.Intersect(Target, Range("A:A")) Is Nothing Or Not Application.Intersect(Target, Range("B4:B6")) Is Nothing Then

Saludos.

zmbcvx dijo...

Gracias Javier por el apunte algo me imaginaba pero no me salia bien.
Saludos

Omar el suipachero dijo...

Realmente una maravilla. Te felicito! Funciona excelentemente bien y queda muy vistoso y profesional.

Un saludo muy grande desde las pampas argentinas!!!

Omar el suipachero

Anónimo dijo...

hola donde se copia ese codigo

gracias

Anónimo dijo...

Gracias por dedicar tu tiempo a ayudarnos y de una manera tan secilla.
saludos

El pilt®afilla - www.3piesalgato.com dijo...

El código se copia en la parte correspondiente al código de la hoja. Para verlo, pulsa Alt + F11 (tecla Alt, y sin soltarla, la tecla F11). Te recomiendo que te pases por este artículo: como hacer macros en Excel.

nelson dijo...

en el blog encontre un macro para calendario emergente, me parecio muy bueno pero mi pregunta es como puedo hacer para que cuando yo haga clik en cualquier celda de la fila tres me aparesca el calendario emergente y pueda introducir la fecha en esa fila no se si prodrias facilitarme un codigo gracias soy nuevo en esto de los macros te lo agradeseria un monton gracias

mi correo es nek_1784@hotmail.com

El pilt®afilla - www.3piesalgato.com dijo...

Nelson, simplemente tienes que cambiar esta línea del condicional:

If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then

Por esta otra:

If Not Application.Intersect(Target, Rows("3:3")) Is Nothing Then

Saludos.

nelson dijo...

Muchísimas gracias funciona a la perfección, que dios te bendiga

nelson dijo...

Hola Javier, tengo una consulta siguiendo todos los pasos que indicas en el blog logre crear el calendario emergente pero en el momento de guardar como libro de Excel me aparece el siguiente mensaje…
” Las siguientes características no se pueden guardar en libros sin macros
.proyecto de VB
Para guardar un archivo con estas características, haga clic en NO y, a continuación elija un archivo habilitado para macros en la lista tipo de archivo”
Al elegir el tipo de archivo “libro de Excel habilitado para macros” recién logra guardar,
Pero cuando abro el archivo en otra computadora el macro no funciona directamente
Hasta que no habilite el contenido en advertencia de seguridad
La pregunta es como guardar un archivo con macro exactamente igual al que tú subiste al blog,
Hablo del archivo “calendario emergente” tengo este problema con todos los macros que logro crear……. recuerda que soy nuevo en esto de los macros

El pilt®afilla - www.3piesalgato.com dijo...

Hola Nelson.

Lo que te ocurre es totalmente normal. Supongo que lo primero te ha ocurrido porque utilizas una versión de Excel 2007 o de Excel 2010. Yo aquí hasta la fecha, vengo publicando contenido para Excel 2003 (compatible con las versiones superiores), porque todavía quedan muchos usuarios que utilizan esa versión.

Respecto a lo segundo, también es totalmente normal. Las macros pueden llegar a ser potencialmente peligrosas, por lo que se requiere que el usuario acepte la ejecución de macros (por defecto están dsehabilitados), por eso cuando envías tu fichero a un amigo, o lo ejecutas en otro ordenador, te dsehabilita la ejecución del código, hasta que no lo autorizas. Solo si confías en la persona que ha creado el macro, es recomendable habilitar los macros. En caso contrario, lo mejor es no habilitarlas, inspeccionar el código fuente para ver que es lo que hace, y si no hay o no ves nada raro, entonces habilitar las macros.

Saludos.

nelson dijo...

gracias javier, por la aclaracion .................entendi perfectamente esto de la seguridad de los macros

saludos desde Tarija Bolivia

nelson dijo...

Hola Javier otra vez con una consulta tengo un libro con varias hojas, el problema es que cuando abro el archivo siempre se abre ne la ultima hoja que lo cerre ...como puedo hacer para que cada vez que abra EL ARCHIVO se abra en una determinada hoja donde esta el menu

El pilt®afilla - www.3piesalgato.com dijo...

Prueba este macro:

Sub Auto_open()
'seleccionamos la hoja Menu
Sheets("Menu").Select
End Sub

Aquí tienes más información: Macro al abrir o cerrar un libro.

Saludos.

Mauroh dijo...

Hola, me parece excelente el aporte, felicitaciones, pero tengo un detalle, al insertar una fila y pasar por sobre el calendario este se borra y no vuelve a ejecutar o aparecer, favor tu ayuda para corregir lo que este realizando mal o bien dar las instrucciones a seguir,Se agradece ayuda

El pilt®afilla - www.3piesalgato.com dijo...

Mauroh, acabo de tdo tipo de pruebas insertando filas, y pasando el mouse por encima del calendario, y permanece en su sitio.

Vamos que no existe ningún problema, al menos en Excel 2003, que es donde lo acabo de probar.

Mauroh dijo...

yo trabajando en 2007. y persiste ese pequeño detalle,descarge el archivo desde la pagina de origen, me posiciono sobre la celda A10,se visualiza el calendario, estando el calendario en vista me posiciono sobre la fila 10 y pff desaparece,no pudiendo volver a ejecutarse. Revisando pinche el Modo Diseño y logre comprobar que el objeto se oculto entre B y C, en otra ocasion entre D y E con aprox un 1% de ancho, imperceptible a la vista, debo buscarlo, tomarlo y volver a darle el ancho necesario, cierro el Modo Diseño y sigo ejecutando.
Espero ser claro en el ejemplo.

Adicional a esto solicito tu instruccion para generar esta consulta en 2 columnas diferentes, por ejemplo C y M, yo lo hice de esta manera,siguiendo la instruccion de condicionar cambiando la linea del "if",
"If Not Application.Intersect(Target, Range("C:C")) Is Nothing Or Not Application.Intersect(Target, Range("M:M")) Is Nothing Then"
Favor tu ayuda para posible corrección de ser necesaria.

Atento a tu gran ayuda
Mauroh

Anónimo dijo...

Muy bueno lo tuyo. Te voy a añadir a mis favoritos y seguiré aprendiendo.

El pilt®afilla - www.3piesalgato.com dijo...

Mauroh, ayer por la tarde como no tenía uuna versión de Excel 2007 a mano, le pedí a una amiga que lo probara, y efectivamente, el calendario hacía un poco de las suyas.

Hace media hora que acabo de probarlo durante 10 minutos, haciendo combinaciones, insertando filas, borrando, moviéndome, y a mí me funciona correctamente en Excel 2007, tanto en modo compatibilidad Exlcel 97-2003, como guardado como fichero de Excel 2007 con macros (xlsm).

Parece ser que en algunas versiones de Excel 2007, no acaba de funcionar correctamente el control de calendario, pero de las más de 400 descargas del ejemplo, que se han producido hasta el día de hoy, solo tú has comentado este problema (y mi amiga, a la que también le funcionaba de forma deficiente).

Para ser sinceros, el código fuente no tiene ningún secreto, y parece ser algo relacionado directamente con control del calendario. Es por eso que desconozco el motivo por el cual no funciona en algunas versiones de Excel 2007.

Te invito a que si tienes la oportunidad, lo pruebes en otro equipo con otra versión diferente de Excel 2007, y veas si funciona.

Mauroh dijo...

Javier, realizare las pruebas en otro equipos y t comentare, de igual manera se agradece el aporte y todo su contenido para este y demas temas del blog.

edgar dijo...

hola, tengo una pregunta :¿como puedo validar unos datos en excel antes de ejecutar una maro? es decir tengo una macro que guarda datos de una hoja a otra, lo que necesito es que antes de ejecutarse, verifique que ciertas celdas si esten llenas, de lo contrario no ejecutar la macro y avisar al usuario que tiene que llenar la celda.

Desde ya muchas gracias

El pilt®afilla - www.3piesalgato.com dijo...

Edgar, por ejemplo, a través del evento SelectionChange, de tal forma que cuando selecciones una celda, se lanza el evento. Dentro de ese evento (que no deja de ser un macro en realidad), pones que evalúe con un condicional IF, si hay datos de esas celdas que necesitas evaluar, y en caso afirmativo, llamas al otro macro simplemente poniendo su nombre (el nombre del macro), dentro del condicional.

Saludos.

Mauroh dijo...

Javier,me aclararias un pequeño problemilla q tengo, nose si la consulta deberia hacerla en otra parte del blog, me confirmas.La duda es si yo recibo de 10 personas distintas una planilla de cada uno, mismo formato y tipo, tomar cada una y copiar y pegar para armar una general, esto debo realizarlo dia a dia. Es posible "exportar" o realizar algun procedimiento para que al llegar cada una de las planillas a mi correo yo pueda abrir la planilla excel y ejecutar dicho procedimiento y automaticamente irse a la planilla general??? Agradeciendo de antemano la ayuda.

El pilt®afilla - www.3piesalgato.com dijo...

Deberías guardar el fichero recibido en tu disco duro y siempre con el mismo nombre (si es que varía el nombre con los datos diarios).

Luego, tan solo deberías introducir en tu libro resumen, las fórmulas que referencian a esos blogs. Por ejemplo, si quieres escribir en A1, el dato de A1 del libro que has recibido y que se llama "datos.xls", slo tendrías que poner algo así en la celda A1 de tu libro resumen:

='C:\Carpeta donde lo guardas\[Datos.xls]Hoja1'!A1

Saludos.

carola dijo...

Hola, la información que han publicado sobre claendarios emergentes me ha sido de mucha utilidad, sin embargo cuando comparto el archivo me saca un error en tiempo de ejecución y me dice que "no se puede asignar la propiedad left de la clase oleobject". No logro encontrar una solución al problema, requiero su valiosa colaboración

Anónimo dijo...

Hola, la verdad es que el calendario emergente me parece una muy buena idea.

Pero me encantaria perfilarlo en el sentido de que emerga el calendario en ciertas celdas como por ejemplo:

C10
E18
E20

Yo no acabo de conseguirlo

El pilt®afilla - www.3piesalgato.com dijo...

Prueba a cambiar la línea del condicional por esto:

If Not Application.Intersect(Target, Range("C10")) Is Nothing Or _
Not Application.Intersect(Target, Range("E18")) Is Nothing Or _
Not Application.Intersect(Target, Range("E20")) Is Nothing Then

Saludos.

Anónimo dijo...

Como puedo hacer para que aparezca el calendario al dar click en una macro boton en lugar de seleccionar una celda o rango.

El pilt®afilla - www.3piesalgato.com dijo...

Échale un vistazo a este artículo: incluir un calendario en un formulario.

Saludos.

mpueyosa dijo...

Acabo de descubrir tu blog, y es simplemente ¡SENSACIONAL!.
Eres un fenómeno. Mucles gracias por compartir tus más que extensos conocimientos sobre el tema.
Un saludo

El pilt®afilla - www.3piesalgato.com dijo...

Gracias por los elogios, pero no es para tanto ;-)

Anónimo dijo...

Hola estoy haciendo la macro:
Private Sub DTPicker1_Change()
Me.DTPicker1.Visible = False
Range("G10").Select
End Sub

Private Sub DTPicker2_CallbackKeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer, ByVal CallbackField As String, CallbackDate As Date)

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$F$10" Then
Me.DTPicker1.Visible = True
Else
Me.DTPicker1.Visible = False
End If
End Sub
Private Sub DTPicker1_Click()
'Al hacer clic en una fecha del calendario
'ponemos el valor en la celda donde estemos situados
ActiveCell = DTPicker1.Value
'ocultamos el calendario
DTPicker1.Visible = False
End Sub

el calendario me la situa en una elda normal, pero lo que quiero es que funcione en una celda combinada de "=F10:N10", tu me puedes ayudar?..
Gracias

El pilt®afilla - www.3piesalgato.com dijo...

En lugar de utilizar esta línea en el condicional:

If Target.Address = "$F$10" Then

Utiliza esta otra:

If Not Application.Intersect(Target, Range("F10:N10")) Is Nothing Then

Saludos.

Carlos Sandoval dijo...

tengo un problema, he utilizado esta genial macro en una hoja donde capturare una base de datos, lo ejecutare en tres columnas diferentes, con tus comentarios pude realizarlo sin problema en tres columnas diferente, pero al darle formato a la tabla donde capturare, al cambiar el ancho de una fila me provoco que el calendario ya no sea visible, pareciera que se adelgazo demasiado. Que puedo hacer pues quiero aplicarlo a un formato de relleno de una base de datos.

Agradezco mucho tu ayuda ha sido grandioso este blog

hipogrifo dijo...

Ante todo muchas gracias por tus consejos y ejercicios, son buenisimos y me ayudan mucho.

El problema que le veo al calendario es que con este codigo no tedeja hacer CTRL+C CTRL+V en la hoja.

¿Por que puede ser?

JoaoM dijo...

Me sirve para una Hoja de facturacion. MYU util, ahorra tiempo, ademas puedo asignarle un rango ("A11:A30").
Tu y tus codigos han sido de MUCHA utilidad para nosotros, los ue andamos buscando algo que nos sea util para nuestro trabajo.
Algunas si los uso, otros los guardo por si algun dia me seran utiles.

Gracias Javier Marco

JoaoM dijo...

¿Como podria hacer para tener el codigo en un Modulo y el llamado en codigo de la hoja?
Probe meterlo en un modulo solo con
Sub Worksheet() y
Sub Calendar1() y en la hoja
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call Worksheet
Call Calendar1
End Sub

pero no me funciona

El pilt®afilla - www.3piesalgato.com dijo...

Prueba este ejemplo en una hoja:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target = Range("A1") Then Call Ejemplo
End Sub

Y esto en un módulo:

Sub Ejemplo()
MsgBox ("Te mueves desde/a la celda A1")
End Sub

Saludos.

Berenice dijo...

el calendario emergente me ha sido de mucha utilidad,
sin embargo en una misma hoja de excel requiero en dos columnas colocar el calkendario emergente ( para referir una a fecha de inicio y a otra a fecha de termino) sin embargo no me es posible hacerlo ya que me arroja como un error ....
como lo hago??? gracias

Anónimo dijo...

Estimado Javier, la verdad es que "eres un maestro" y te felicito, ¿me podrías ayudar con lo siguiente?, me gusto la macro del calendario (yo se poco y nada de esto,macro)y aprovecho lo que publicas para mis trabajos, hice todo lo que indicas para el calendario, pero me xsale el siguiente error al ejecutarlo, aparte de que el calendario no desaparece de la hoja de excel, "Se ha producido el error "424" en tiempo de ejecución,se requiere un objeto", ¿que estoy haciendo mal, y que puedo hacer?, uso excel 2007, desde ya te agradezco tu ayuda.

El pilt®afilla - www.3piesalgato.com dijo...

Mírate mi comentario del 15 de junio del 2010, que hay al final de este artículo donde explico como incluir un calendario en un formulario.

Saludos.

Anónimo dijo...

Realmente es asombroso todo lo que se puede hacer con excel, definitivamente este programa no deja de sorprenderme y dia tras dia deseo apender mas y mas

Anónimo dijo...

Javier, muchas gracias por el aporte, realmente es extraordinario.
Atte, ABES

Anónimo dijo...

Exelente aporte Muchas gracia

Anónimo dijo...

Estimado, por favor si me puedes ayudar con lo siguiente: el tamaño del calendario difiere cada vez que abro nuevamente el archivo. Necesito que no se deforme cada vez que se abre el documento. Cualquier información seria buenísimo.

Jesus dijo...

Buenas tardes, he seguido sus pasos para insetar el calendario emergente, y esta muy bien,me he enterado y eso que no se nada de programacion VB.
mi pregunta es si se puede en la misma hoja, utilizar este calendario en varias celdas de destino.
por ejemplo en stocks de almacen, fecha entrada....fecha de salida...venta...
gracias de antemano

Anónimo dijo...

SI
En la linea If Not Application.Intersect(Target, Range("B3:B1000")) Is Nothing Then

Para columna completa Range("B:B"))

If Not Application.Intersect(Target, Range("B3:B1000,I3:I1000")) Is Nothing Then

dos columnas completas
Range("B:B,I:I"))

En tu caso, solo cambiale letra de columna y numero desde, hasta

Octavio dijo...

Excelente el aporte, pero tengo una duda, como se podría modificar el código para que no deshabilite la opción de deshacer(ctrl+z), gracias por la ayuda.

fgomezal dijo...

Amigos de "HOJA DE CALCULO EN EXCEL", estupendo aporte, justo acabo de implementar el calendario emergente en una base de datos que desarrolle para imprimir polizas cheques y este articulo me queda muy "adoc" para seleccionar las fechas que se requieran o necesiten sobre todo en los cheques postfechados.
Gracias por compartir su conocimiento y sabiduria en este programa de Excel.
Saludos.....Federico

Anónimo dijo...

Gracias, gracias, gracias. Me encanta aprender a hacer cosas nuevas, especialmente si se trata de Excel que me interesa tanto. Gracias por compartir con todos tus conocimientos, consigues que muchos queramos saber más...

Anónimo dijo...

Pedro
Gracias Javier funciona sin embargo depues de aplicar el calendario en dos columnas al cerrar la aplicación y volver a iniciarla el calendario queda con un tamaño muy reducido y tengo que ampliarlo desde el modo diseño.Otra cuestion es que el calendario se situa muy proximo a la barra de tareas y aparece cortado en las cinco primeras filas......

alguna solución saludos

JoaoM dijo...

Anonimo, desde el editor VBA, trata de configurar esta parte tal como la ves acá

Calendar1.Left = Target.Left + Target.Width + 50 'distancia del rango en lo Vertical
'para que no se nos deforme el calendario, si estamos en las últimas filas incluimos un condicional
'que controlará la celda donde estamos y la comparará con la última fila de la hoja de cálculo
If ActiveCell.Row + 20 >= Cells.Rows.Count Then
Calendar1.Top = Target.Top - 145
Else
Calendar1.Top = Target.Top - 10 'distancia del rango en lo Horizontal
End If

Anónimo dijo...

Pedro
Gracias por contestar se solucionó el problema de que el calendario se situase muy proximo a la barra de tareas y apareciese cortado.

No obstante sigue la misma situacion en cuanto al tamaño de calendario. si le das un tamaño en modo diseño cuando cierras y abres de nuevo la aplicacion este aparece con un tamaño reducido respecto al que dio en modo diseño alguna solucion. office 2010. gracias

JoaoM dijo...

Ahí si que no te puedo ayudar porque no está a mi alcance.

Probé en propiedades darle menos tamaño, muy pero muy pequeño y cerré Excel.
Volvi abrir y tenen el mismo tamaño,c le di un tamaño mas grande y cerre. Volvi y el tamaño se conservo, no entiendo porque a ti no sucede lo mismo

Anónimo dijo...

Muchas gracias por la web. Es la primera vez que he necesitado hacer algo especial en excel y me lo ha solucionado a la primera.

Una pregunta. ¿Crees que se puede hacer a excel redondear un número siempre a 2 cifras significativas, es decir, las dos cifras de mayor peso y que no sean 0?

Por ejemplo. de 2,1345 sea 2,1
De 0,003456 sea 0,0035
Que todo esto sea automático claro que no tenga que estar dandole al botón de modificar número de decimales después de cada cálculo.

Muchas gracias de nuevo

El pilt®afilla - www.3piesalgato.com dijo...

Gracias por tu comentario.

Se puede hacer con la función redondear, para lo cual, en una columna contígua, por ejemplo en B1 pon esto (suponiendo que el dato lo tengas en A1):

=REDONDEAR(A1;2)

Donde el 2, es el número de decimales de redondeo. Por ejemplo, si en A1 tienes 2,1345, en B1 te aparecerá 2,13. Si en cambio pone un 3 en lugar de un 2 en la fórmula que te puse, en B1, aparecerá 2,135.

Saludos.

Anónimo dijo...

Hola, muchas gracias por todo!! Es de mucha ayuda!! Solo que tengo problema porque baje el demostrativo y copio el codigo a un nuevo libro pero no se activa.. Osea queda siempre visible y no me deja colocar las fechas...

Anónimo dijo...

Realmente muy bueno!! Tengo excel 2007 y el problema es que luego de colocar esta macro no me deja copiar y pegar en cualquier celda. Osea, en la celda A1 copio y se ponen los bordes "titilando", al cambiar de celda (Ej: A2) desaparecen esos bordes y no tenga nada para pegar.
Espero ser claro..
Feices fiestas!!

Anónimo dijo...

Buenas tardes. Tu post me ha resultado excelente. Te pregunto algo ¿Porque cuando utilizo "inmovilización de paneles" el calendario no funciona? Es decir, se muestra el calendario, pero no me permite seleccionar la fecha.

JoaoM dijo...

En esta línea tienes que hacer el cambio de columna o mensionar las celdas donde quieres que aparezca el calendario
If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then

Si l oquieres en mas de la columna A, Ej en la a y c

If Not Application.Intersect(Target, Range("A:A,C:C")) Is Nothing Then
o

If Not Application.Intersect(Target, Range("A2:A50, E20:E100")) Is Nothing Then

En ese rngo es donde te actua el click en las celdas respectivas

JoaoM dijo...

Tengo un problema con este calendario.
Desde hace bastante lo uso pero ahora con Office 2013 abro el libro donde tengo la macro (plantilla .dotm), voy a la celda de la columna y hago click para que aparezca el calendario y hace para aparecer pero se mantiene tenue, no se visualiza.
Tengo que clicar en otra celda de la misma columna y entonces se visualiza y luego clico en la celda que pretendo y listo.
Pero porque sucede esto?.

A ver si el amigo Javier Marco sabe la explicacion

Pipe dijo...

Hola Javier. Esta macro con el evento worksheet_selectionchange deshabilita copiar / cortar & pegar en la hoja de cálculo. ¿Eso tiene solución?