Validar fechas en Excel con un calendario

viernes, mayo 18, 2007

A partir de la nota sobre cómo insertar un calendario en una hoja de Excel, un lector me pregunta como crear un calendario que aparezca cuando elegimos una celda en la que queremos ingresar una fecha.
El objetivo, claramente, es validar la entrada. Es decir, asegurarnos que el usuario ingrese una fecha y no un número cualquiera.
Una forma práctica de hacerlo es usando Validación de datos. Por ejemplo, si queremos asegurarnos que el rango A2:A20 el usuario ingrese sólo fechas del año 2007, podemos definir esta validación de datos




De esta manera, si el usuario elige una fecha fuera del año 2007, recibirá un mensaje de error



Pero en realidad lo que queremos es que el usuario elija la fecha que quiere introducir en la celda. También esto podemos hacerlo con validación de datos, usando la opción Lista.
Creamos un nombre, año_2007, que contenga las fechas a usar. Para esto podemos, por ejemplo, poner las fechas en el rango A1:A365 de la Hoja2. Luego definimos la validación de datos



y así obtenemos una lista desplegable.



Coincidamos en que estos métodos no son muy flexibles que digamos. Así que nuestro objetivo será crear un calendario que aparezca cada vez que queremos elegir una fecha. Esto la haremos con una macro y el Calendar Control (el número depende de la versión de Excel), que ya mencionamos en nuestra nota anterior.

Nuestra macro puede estar almacenada en el Personal.xls y de esta manera estar disponible para todo cuaderno activo. O puede estar ligada a un cuaderno específico y sólo estará disponible cuando este cuaderno esté abierto. Esto último es lo que mostraremos en esta nota.

Nuestro proyecto se compone de lo siguiente:
- una forma que contenga el calendario
- una macro que muestre el calendario cada vez que la celda activa esté dentro del rango indicado e introduzca la fecha elegida en la celda activa
- un evento que dispare la macro cuando la celda activa esté en el rango indicado.

Empecemos por crear la forma que contenga al calendario. Para esto activamos el editor de Visual Basic (ALT+F11) y agregamos una forma (UserForm) al proyecto



En la ventana de Propiedades el proyecto (si no está visible usamos el menú Ver—Ventana Propiedades del VBe, o pulsamos F4) cambiamos el valor estándar en Caption por "Elija un fecha"



Para agregar el Calendar Control debemos hacer visible el cuadro de herramientas (menú Ver—Cuadro de Herramientas). Inmediatamente usamos el menú Herramientas—Controles Adicionales



Y elegimos el Calendar Control. Esto hace que su icono aparezca en el cuadro de controles a la izquierda de la forma. Pulsamos el icono y creamos el calendario sobre la forma



Las propiedades del calendario pueden ser cambiadas en la ventana de Propiedades, estando este seleccionado.


Ahora tenemos que escribir el código para el calendario. Para esto, con la forma seleccionada, usamos el menú Ver—Código (atajo: F7). Esto nos lleva a la ventana de código de la forma. En ella escribimos



Para probar el funcionamiento de la forma la seleccionamos con Ctrl+Tab y pulsamos F5. La forma aparecerá en la Hoja1. Para cerrarla pulsamos la X en el ángulo superior derecho.

Nuestro próximo paso es poner un código que transfiera la fecha elegida en el calendario a la celda activa en la hoja.
Hacemos un doble clic sobre el calendario en la forma, lo que abre la ventana de código donde escribimos


Private Sub Calendar1_Click()
ActiveCell.Value = Calendar1.Value
Unload Me
End Sub


Volvemos a probar el funcionamiento de nuestra forma, seleccionándola con Ctrl+Tab y F5 para accionarla. Elegimos una fecha del calendario y veremos que este se cierra y la fecha elegida aparecerá en la celda activa.

Ahora necesitamos un método para que el calendario se abra sólo cuando la celda seleccionada (activa) este comprendida en el rango donde queremos poner las fechas (en nuestro caso A2:A20).
Para esto necesitamos dos elementos: una rutina que haga aparecer la forma y un evento que accione la rutina cuando la celda seleccionada cae en el rango indicado.

La macro para mostrar la forma la escribimos en un módulo de Vba, que agregamos usando el icono o con el menú Insertar—Módulo:


Sub abrir_calendario()
UserForm1.Show
End Sub


El evento debemos escribirlo en la ventana de código de la Hoja1, que abrimos haciendo un doble clic en el icono de la Hoja1 en la ventana del proyecto.

Allí agregamos este código


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngFechas As Range

Set rngFechas = Range("A2:A20")

If Union(Target, rngFechas).Address = rngFechas.Address Then _
Call abrir_calendario


End Sub


Con esto hemos terminado nuestro proyecto. Ahora, cada vez que seleccionemos una celda en el rango A2:A20 de la Hoja1, aparecerá el calendario y podemos elegir la fecha.



Como abran notado, podemos cambiar el año y el mes libremente.





Technorati Tags:

134 comments:

Anónimo,  22 mayo, 2007 19:27  

Gracias, Jorge era precisamente lo que estaba buscanda.

Att:

Julian P.

Anónimo,  05 junio, 2007 02:33  

hola que tal, me sirve de mucho este blog, y se lo agradezco
pero tenia una duda, hace mucho es para redondear en excel, digamos lo que andaba buscando es que en las celdas, hacer una funcion "si" si un numero es menor de 50 por ejemplo 43, en otra celda se pone solo 50 y asi hasta llegar hasta el 3000 por ejemplo pero solo llega hasta 500, y me queda una formula asi:
=SI(G26<51;"50";SI(G26<101;"100";SI(G26<151;"150";SI(G26<201;"200";SI(G26<251;"250";SI(G26<301;"300";SI(G26<351;"350";SI(G26<401;"400"))))))))
bueno, espero que sepa entender, saludos

Gilberto 07 junio, 2007 17:27  

NECESITO AYUDA EN EL CALCULO DEL NUMERO DE CELDAS DENTRO DE COLUMNAS DE DATOS

LES ANEXO TABLA
MUCHAS GRACIAS

Jorge L. Dunkelman 08 junio, 2007 01:16  

Bueno, no se trata exactamente de la nota del tema. Para lograr lo que estás buscando, si lo he entendido, es más sencillo usar la función MULTIPLO.INFERIOR.
Por ejemplo, supongamos que en el rango A1:A4 tienes los vaores 51, 101, 151 y 201.
EN la celda B1 pones la fórmula MULTIPLO.INFERIOR(A1,10) y la copias al resto del rango.
De esta manera no estás limitado a las 7 condiciones que permite la función SI.

Jorge L. Dunkelman 08 junio, 2007 01:19  

Hola Gilberto,
no entiendo tu pregunta. Para mandarme un adjunto hazlo a dunk@maaganm.co.il

Gabriel 09 junio, 2007 12:32  

Como se hace cuando las celdas con fecha van por ejemplo en h21,h31,h41,h51... y no en un rango h21:h51

Jorge L. Dunkelman 09 junio, 2007 14:51  

Hola Gabriel,
para crear un rango no continuo mantienes apretada la tecla Ctrl mientras vas seleccionando las celdas con el mouse.

Gabriel 11 junio, 2007 11:36  

Muchas gracias Jorge por tu respuesta.Sigo con problemas.
En la macro de abajo he llegado hasta una celda (H2022) en total he metido 50 celdas. Si quiero meter mas, H2063, H2104, ... Me da error. Mi ignorancia me impide saber que sucede. Muchas gracias


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngFechas As Range

Set rngFechas = Range("h13,h54,h95,h136,h177,h218,h259,h300,h341,h382,h423,h464,h587,h628,h669,h710,h751,h792,h833,h874,h915,h956,h997,h1038,h1079,h1120,h1161,h1202,h1243,h1284,h1325,h1366,h1407,h1448,h1530,h1571,h1612,h1653,h1694,h1735,h1776,h1817,h1858,h1899,h1940,h1981,h2022")

If Union(Target, rngFechas).Address = rngFechas.Address Then _
Call abrir_calendario

End Sub

Jorge L. Dunkelman 14 junio, 2007 17:53  

Hola Gabriel,
ciertos objetos en Excel, tienen un límite de 256 elementos. Esto es lo que sucede con la matriz que determina tu rango (tiene 259 incluyendo las comillas y los paréntesis).
Tendrás que buscar otra formar de determinar la aparición del calendario (por ejemplo darle un fondo a las celdas y luego usar la propiedad interior.colorindex del rango).

Luis Felipe Cruz Garcia,  28 junio, 2007 01:54  

Que tal Jorge, mi nombre es Luis Felipe y me han servido mucho tus macros, solo para comentarte que tal vez olvidaste comentar que en el calendario es bueno agregar la linea "Calendar1.Value = Now" en el evento UserForm_Activate(). De esta forma cada que abras el calendario te mostrara la fecha actual, en nuestra empresa es lo mas comodo. Gracias y saludos desde Aguascalientes, México.

Jorge L. Dunkelman 28 junio, 2007 06:48  

Hola Luis, gracias por el comentario. Efectivamente, se me paso por alto.

Ariel Escobar,  11 julio, 2007 19:24  

hola me sirvio mucho este tutorial pero tengo una consulta como ago para que cuando el calendario aparenca esta marcada y posicionado en dia mes actual.

dejo un un ejemplo.
http://img182.imageshack.us/img182/8140/fehcand0.jpg

Jorge L. Dunkelman 11 julio, 2007 22:05  

Como dijo el lector Luis Felipe Cruz García en su comentario: "agregar la linea "Calendar1.Value = Now" en el evento UserForm_Activate(). De esta forma cada que abras el calendario te mostrara la fecha actual"

Ariel Escobar,  16 julio, 2007 19:34  

gracias por la ayuda solo tengo una consulta mas como extraigo el mes selecionado en el calendario a una celda en excel ejamplo

seleciono 12 junio en el calendaio
y que en una selda apareca el mes que selecione de la fecha

Jorge L. Dunkelman 16 julio, 2007 20:23  

Hola Ariel

Seleccionas el área donde aparecen las fechas. Abrís el menú Formato--Celdas y en la pestaña Números elegís Personalizada. En la ventanilla "Tipo" escribis "mmmm" (sin las comillas) y apretas Aceptar. Excel exhibirá sólo el mes, aunque el valor de la celda incluye la fecha completa.

Petit Comite 29 agosto, 2007 15:56  

Necesito tu ayuda para poder agilizar la programación de la un extensa hoja en el caso de insertar el calendario.


He creado un botón de opción, que en el caso de que su valor sea True se muestre el objeto Calendario. El problema es el siguiente:
Voy a abilitar este botón de opción en una misma hoja en 15 ocasiones, y la celda vinculada será distinta en cada una de ellas.

Cómo puede agiliar el diseño de la macro? Tengo que crear un evento para cada uno de los botones de opción. Podría agrupar las condiciones, y la instrucción ?

Un saludo,y mil gracias

Tu blog es increiblemente bueno !!!

Petit Comite 29 agosto, 2007 16:14  

Perdona, este es el fichero bueno:



Hoja Control formulario

Jorge L. Dunkelman 29 agosto, 2007 18:16  

Hola Petit

no podes adjuntar un archivo en el comentario. Mandamelo a jorgedun@gmail.com

Anónimo,  25 octubre, 2007 16:49  

Sr.

Dunkelman, deseo agradecer sus conocimientos, los cuales comparte sin ningun aporte sustantivo de nuestra parte (me refiero como consumidores, de su tiempo e ideas).

En un aparte, deseo realizarle la siguiente consulta, existe la posibilidad de agregar una linea en la macro del formulario que despliega el calendario, que actualice al menos mensualmente la fecha con que se carga el calendario, esto para no tener que entrar al formulario y cambiarlo allí, bueno es facil pedir, si se puede y le resulta factible lo agradeceremos atte.

F. Godoy A.
fernando.godoy@vtr.net

Jorge L. Dunkelman 25 octubre, 2007 19:44  

Hola Fernando
fíjate en el comentario del amigo Luis Felipe Cruz Garcia:
agregar la linea "Calendar1.Value = Now" en el evento UserForm_Activate(). De esta forma cada que abras el calendario te mostrara la fecha actual

Jair,  15 noviembre, 2007 23:04  

Hola Jorge, la verdad lo que no me queda claro en que parte va el evento Userform_activate() pues dentro de los códigos que describe arriba no lo veo.

Jorge L. Dunkelman 16 noviembre, 2007 17:20  

Hola Jair

tienes razón, no está mencionado en la nota. Los pasos son los siguientes:
1 - selecciona el calendario (Userform) en el editor.
2 - Presiona F7 para llegar al módulo del userfor.
3 - Enlla ventanilla superior derecha del editor elige el evento Activate. En el módulo aparecerá:

Private Sub UserForm_Activate()

End Sub


4 - Agrega Calendar1.Value = Now.

Guarda el proyecto.

Jair,  19 noviembre, 2007 22:23  

Jorge, gracias, cacharreando con las macros, en la macro abrir calendario hice esto y me funcionó:

Sub abrir_calendario()
UserForm1.Calendar1.Value = Now
UserForm1.Show
End Sub


De nuevo muchas gracias.

ana,  21 febrero, 2008 14:46  

Muchas gracias por todo, abusando de tus conocimientos.. ¿como seria para q no sea un rango de celdas las q podamos seleccionar para q se muestre el calendario, sinó una concreta?

Jorge L. Dunkelman 21 febrero, 2008 18:04  

Hola Ana

para que el evento se limite a una celda en particular tienes que poner la dirección de la celda en la definición del rango en SelectionChange. Si la celda en particular es A1 en lugar de

Set rngFechas = Range("A2:A20")

pones

Set rngFechas = Range("A1")

Anónimo,  25 junio, 2008 21:23  

Buenas tardes,

Agradezco mucho la existencia de este espacio, es una ayuda increíble para algunas cosas que le "trancan a uno el serrucho"como decimos en Venezuela. Mi calendario fuinciona perfecto si le indico un rango específico de celdas pero si indico celdas separadas por comas b5,b10,b11,e10 no se ejecuta la macro en la celda indicada, al parecer no he cometido ningún error, de hecho he respetado los detalles de la sintaxis para evitar fallas. Agradezco muchísimo su ayuda para simplificar y automatizar tareas de excel.

Saludos,

José Duque
Venezuela

Jorge L. Dunkelman 26 junio, 2008 16:31  

Hola José

siguiendo con mi ejemplo tendrías que cambiar un poco el código del evento para indicar cuál es el rango.
Por ejemplo, si quieres que el calendario se abra también en el rango C2:C20, tienes que poner

Set rngFechas = Range("A2:A20, C2:C20")

en el código.

Anónimo,  11 julio, 2008 00:24  

hola disculpa me gustaria saber como realizo un filtro desplegando el calendario

Jorge L. Dunkelman 14 julio, 2008 21:13  

Si usas un calendario de hecho no necesitas una lista desplegable. Pero si quieres tener una lista desplegable con fechas, debes definir una lista de fechas en un rango o en un nombre.

alvaro 15 julio, 2008 00:11  

hola Jorge
impresionado por sus conocimientos tengo una duda que intentare trasmitirla, el calendario funciona perfectamente, pero en la celda me aparece false, en vez de la fecha, ya le he puesto formato de fecha, en la seccion personalizada, muchas gracias de antemano.

Jorge L. Dunkelman 15 julio, 2008 18:03  

Hola Álvaro

mandame el archivo con el problema (jorgedun@gmail.com)

Anónimo,  21 julio, 2008 00:47  

Qué tal Jorge... Te felicito por tu Blog, uno de los pocos que realmente cumple con la grandiosa tarea de trasmitir conocimientos. He resuelto y realizado muchos proyectos gracias a tu ayuda, sin embargo, deseo conocer lo siguiente:

De una lista desplegable, utilizando validación de datos, deseo que en una celda específica, me aparezca otra lista en función de la selección realizada en la lista desplegable. Es decir, por cada selección de la Lista Desplegable, se genere otra lista, ligada a esa selección en una misma celda específica. Cómo lo hago?

Jorge L. Dunkelman 21 julio, 2008 20:44  

Fijate si la técnica que muestro en esta nota te ayuda.

Wilson,  31 julio, 2008 22:28  

Hola Jorge, muy útil tu blog.
Tengo una pregunta. Es posible, y si es asi como?, que junto al libro de excel se gurde el calendario activex (mscal.ocx) para que si le paso el archivo a alguien que no tenga el calendario el libro siga funcionando?

Gracias.

Wilson

Jorge L. Dunkelman 02 agosto, 2008 18:13  

Si lees inglés puedes ver esta discusión en el foro Excel de Ozgrid.
Básicamente me parece que la mejor soución es pedirle al usuario que instale el calendario.

Anónimo,  20 agosto, 2008 23:56  

Estimado Jorge, no me queda mas que agradecerle tanta ayuda, me ha servido de mucho en una hoja que llevo, si no es mucha molestia, podria decirme como modificar para que en otra hoja me haga lo contrario, es decir en el calendario despliegue la fecha que se indica en la celda que esta activa?
Muchas gracias
Galileo.

Jorge L. Dunkelman 21 agosto, 2008 22:06  

Supongamos que la celda C1 de la hoja1 contiene la fecha, en el evento UserForm_Activate() puedes poner

Private Sub UserForm_Activate()
Calendar1.Value = Sheets(1).Range("C1").Value
End Sub

Anónimo,  22 agosto, 2008 17:26  

Hola Jorge,

Gracias por tu blog, me ha sido de gran ayuda.
Tengo una duda: ¿como hago para que el calendario aparezca al hacer doble click sobre la celda y no al ponerme sobre ella (que es como funciona en el ejemplo desarrollado arriba.
Desde ya muchas gracias por tu ayuda.
Saludos,

Carlos

HUGO28 23 agosto, 2008 22:04  

Hola:
Alguien podria ayudarme, tengo el siguiente codigo

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngFechas As Range

Set rngFechas = Range("F8:F200", "G8:G200")

If Union(Target, rngFechas).Address = rngFechas.Address Then _
Call abrir_calendario


End Sub
pero al intentar adicionar otro rango de celdas en Range no me muestra el calendario en este tercer rango, como le hago para que me aparezca el calendario en los rangos siguientes("B8:B200","F8:F200", "G8:G200").

Jorge L. Dunkelman 28 agosto, 2008 17:23  

Hola Carlos

progrmando el evento Worksheet_BeforeDoubleClick

cieiyi3 05 setiembre, 2008 02:00  

Buenas tardes señor Jorge, de antemano lo felicito, es usted un maestro en todo el sentido de la palabra, mi consulta es la siguiente: tengo un rango de celdas en excel a los cuales le realicé una validación de datos "tipo fecha", y en visual basic un control calendar, el cual le asigna la fecha a ese rango; pero cuando elijo la fecha en el control y esta se inserta en la celda del rango; la validación de datos no muestra el error:

Por eje: fecha <=15-09-08, esa es la condición; y en el calendario elijo por ejemplo 16-09-08, la validación de datos no se activa, solo funciona si le asigno la fecha a la celda manualmente.

Señor Jorge como puedo solucionar esto. mil gracias y espero su pronta respuesta, mi correo es cieiyi3@gmail.com
ATT: Carlos Andrés.

Jorge L. Dunkelman 05 setiembre, 2008 08:54  

Hola Carlos

validación de datos funciona cuando el valor es introducido en la celda directamente. Lo que sucede en tu caso es lo mismo que cuando copias y pegas el valor en la celda. También en ese caso validación de datos no funciona.
La solución en tu caso es programar un evento que evalúe el valor en la celda y haga las veces de validación de datos.

cieiyi3 09 setiembre, 2008 17:48  

Buenos días señor Jorge, en una anterior consulta, le pregunte sobre el por que la Validación de datos en excel, no validaba la fecha introducida por medio de un Control Calendar; para lo cual agradezco su respuesta; he intentado por todos los medio programar ese evento de la siguiente forma: tengo dos Celdas, en la primera celda esta el valor introducido por el calendario (por ejemplo 17-09-08; en otra celda tengo el parametro que necesito para que sea comparado con la primera celda por ej: 15-09-08, necesito que si la primera celda es mayor a la fecha de la segunda; es decir: if "16-09-08" > "15-09-08" then
un mensaje de error que diga que se paso de la quincena. por el momento he programado este procedimiiento, pero no se que me falta para que me funcione:

Sub aprobarfecha()
Dim celda As Range
Dim celda1 As Range
Set celda = Range("E8:E60")
Set celda1 = Range("O9")

If IsDate(celda) = True < IsDate(celda1) = True Then
MsgBox "La fecha que usted eligio no puede ser mayor a la quincena programada, por favor ingrese de nuevo la fecha", vbCritical, "Insertar fecha"
End If
End Sub

Claro esta, que si funcionara este procedimiento lo llamaria (Call) en el evento Worksheet_SelectionChange de la Hoja objetivo. que puedo hacer para que me funcione señor Joge?.

Mil gracias por su ayuda.

Max 29 setiembre, 2008 19:26  

Que tal sr. Jorge

he estado checando su blog y me ha servido de mucho, solo que tengo una duda. Se puede validar que en la seleccion del dia, solo sea de un dia en especifico, por ejemplo : tengo que hacer un reporte en el cual solo sera semanal, por tal motivo solo me deje seleccionar o validar que la fecha seleccionada se lunes.

Bueno sr Jorge de doy las gracias de ante mano.

Jorge L. Dunkelman 01 octubre, 2008 00:18  

Hola Max

puedes usar validaciión de datos en la opción Personalizada con esta fórmula

=DIASEM(A1,2)=1

Esto permitiría ingresar en A1 solo fechas cuyo día de semana sea lunes.

Juan Antonio Martínez (Duke) 23 octubre, 2008 21:12  

Hola:
El calendario me funciona a la perfección, pero necesito delimitar la entrada de datos a un rango de la columna D y E completa, pero que no se active en las celdas de fondo blanco y/o azul...

Se puede definir el rango para lanzar el calendario de esta manera...

Gracias de antemano.

Jorge L. Dunkelman 25 octubre, 2008 09:36  

Si, tienes que agregar una condición en la programación del evento de manera que si el fondo de la celda es blanco o azul

target.Interior.ColorIndex = el número del color en la paleta

Juan Antonio Martínez (Duke) 25 octubre, 2008 09:53  

Gracias. Lo he solucionado de la siguiente manera:

Set rngFechas = Range("D:D, F:F")
If (Union(Target, rngFechas).Address = rngFechas.Address) And ((Target.Interior.ColorIndex <> 2) And (Target.Interior.ColorIndex <> 5)) Then _
Call abrir_calendario

Pero... ahora me surge otro problema:

Las celdas donde debe de lanzarse el evento tienen un formato condicional que hace que cambien de color al cumplirse, pero el Interior.ColoIndex es Blanco aunque la celda sea Naranja o Verde. Lo he solucionado poniendo el fondo de la celda en Negro, pero creo que eso es una chapucilla.

Alguna idea.?

Anónimo,  31 octubre, 2008 14:04  

Buenos días Sr. Dunkelman,

En primer lugar, felicitarle por su blog, que nos saca de apuros a muchos (incluso aquellos que no tenemos grandes conocimientos podemos hacer nuestros pinitos con su ayuda).

He seguido sus pasos, y el calendario funciona perfectamente en dos columnas. Pero necesito que funcione en tres columnas distintas, y cuando introduzco el tercer rango (columna J):

Set rngFechas = Range("E5:E3000, I5:I3000, J5:J3000")

Entonces no sólo no funciona el calendario en la columna J, sino que además deja de funcionar en las columnas E e I


Me parece haber leido que alguien más ha tenido este mismo problema, pero creo que no he visto ninguna idea o solución al respecto. ¿Qué podemos hacer para que el calendario funcione en tantas columnas como queramos (mi tope de funcionamiento está en dos columnas y no sé a qué se debe)?

MUCHÍSIMAS GRACIAS POR SU ATENCIÓN

Jorge L. Dunkelman 06 noviembre, 2008 18:55  

Una solución es crear tres rangos y luego usar OR para definir los rangos válidos.

HECTOR LEAL 09 enero, 2009 19:42  

Buenas tardes

Tengo una duda respecto a la inclusión de varios rangos ya que solo puedo colocar dos y necesito que el calendario aparezca por lo menos en cuatro rangos distintos?

Hector

Jorge L. Dunkelman 10 enero, 2009 12:04  

Como señalo en mi respuesta del 6 de nooviembre, una solución es definir los rangos y usar la función OR en el evento Sub Worksheet_SelectionChange. Por ejemplo, si queremos agregar los rangos F2:F20 y G2:G20, tendríamos que poner en el evento

If Union(Target, rngFechas).Address = rngFechas.Address _
Or Union(Target, rngFechas1).Address = rngFechas1.Address _
Or Union(Target, rngFechas2).Address = rngFechas2.Address Then _
Call abrir_calendario

Jose 11 enero, 2009 20:07  

Ante todo, me han servido de mucho todas las explicaciones que ha dado con respecto al calendario.
Una sola cosa, ¿como hago para que introduzca la fecha sin tener que hacer click? solo con pulsar enter, por ejemplo.
Gracias.

Jorge L. Dunkelman 11 enero, 2009 22:14  

Un camino sería agregar un botón (control) con la leyenda Aceptar. A este control le progrmamos un evento como el del calendario, algo así

Private Sub CommandButton1_Click()
ActiveCell.Value = Calendar1.Value
Unload Me
End Sub

Luego al abrirse el calendario se puede pasar el foco al botón pulsando TAB, y al apretar Enter se ingresará la fecha y se cerrará el calendario.

HECTOR LEAL 13 enero, 2009 16:03  

Gracias, Jorge su ayuda fue muy importante en mi proyecto de nuevo muchas gracias, la solución es la mejor y el calendario funciona como un reloj.
Hector

Anónimo,  10 febrero, 2009 04:32  

buenas

esta herramienta me servira mucho.

pero no lo puedo hacer funcionar.

tengo office 2003 y solo encuentro la opcion dentro de los controles adicionales de "microsoft office proyect calendar control"

el cual al colocarlo sobre la forma se ve en blanco. y no se veel calendario. al ejecutarlo para que se vea en la hoja de excel se ve un triangulo gris.

me pueden ayudar.

gracais de antemano.

Jorge L. Dunkelman 10 febrero, 2009 13:48  

SI te falta el control (lo que me parece extraño) puedes intentar descargarlo e instalarlo o utilizar otro como el DTPicker. Estás tratando de usarlo directamente sobre la hoja o sobre un userform en el editor de Vb?

Anónimo,  10 febrero, 2009 19:40  

GRacais por su respuesta.

lo estoy utilziando sobre un userform en el editor de VD.

seguia al pie de la laetra sus pasos.

tampoco enceuntro el comando al que se refiere.

bueno buscare instalar directametne el VB. pues solo lo tengo gracias a que venia con los programas de office. despues le cuento como me fue.

Muchas gracias

Anónimo,  10 febrero, 2009 22:52  

Hola.

yo denuevo.

soy el mismo anonimo de antes... jijiij

bueno al parecer ese no es el problema.

descarge un VB nuevo y todo y anda.

simplemente no tengo como control adicional el control calendar.

donde lo puedo obtener. tambien he buscado esta opción y no hay muchas respuestas, mas que en algunas versiones del excel 2003, existen control calendar de versiones anteriores, 8 y se a creado algo con el 11... pero nada de si no tienes ninguna versión.

yo vajo todas las actualizaciones que me sugiere el office.

conoces alguna forma para obtener ese control adicional.

de antemano gracias

Anónimo,  10 febrero, 2009 23:25  

Hola

yo denuevo.

Descubri que no tenia el archivo .OCX refeerente a los calendarios.

o baje de VB. y me presento con el siguiente problema como lo agrego a un control adicional.

y descubro lo siguiente:

Importador de controles ActiveX de formularios Windows Forms (Aximp.exe)

(http://msdn.microsoft.com/es-es/library/8ccdh774(VS.80).aspx)

pero para mi colmo. entro de mi sistem32 no encuentro este archivo Aximp.exe, por lo tanto me siento atado de manos.

espero que pueda guiarme, aunque le tema se desvio demasiado del inicio de su tema.

saludos

Jorge L. Dunkelman 11 febrero, 2009 22:14  

Puedes descargar el control que te falta aquí

Anónimo,  12 febrero, 2009 05:15  

Jorge: Agradezco su ayuda y el link que me envio. Ahora si puedo utlizar el Control calendar.

Aunque me encuentro con el siguiente problema en el codigo:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngFechas As Range

Set rngFechas = Range("D2:D300, I2:I300, J2:J300")

If Union(Target, rngFechas).Address = rngFechas.Address _
Or Union(Target, rngFechas1).Address = rngFechas1.Address _
Or Union(Target, rngFechas2).Address = rngFechas2.Address Then _
Call abrir_calendario

End Sub

al probar si funciona en alguna celda del rango, me sale un error 424 en el momenot de ejecución, se requiere un objeto. Tambien aparece al hacer clik sobre otra parte de la hoja, obtengo el mismo error.

Muchas gracias por toda su ayuda y Felicitaciones por el Blog. Me a ayudad o mucho con otras dudas que tenia para el trabajo que realizo.

Atte

Edu. (ex. Anonimo jijiji)

Jorge L. Dunkelman 12 febrero, 2009 19:10  

Edu
no has definido los rangos rngFechas1 y rngFechas2, por eso al correr el código se genera el error (Vb busca un objeto que no existe).

Anónimo,  12 febrero, 2009 20:09  

Hola Jorge, Gracias x toda la informacion que pones a disposicion, Te molesto porque si bien logre hacer andar el calendario con un click, no se exactamente que deberia cambiar para que funcione al hacer doble click en una celda. Si pudieras indicarme seria Grandioso. Mas arriba lei algo de cambiar el evento, pero no lo logro hacer. Gracias

Anónimo,  12 febrero, 2009 23:41  

Jorge

Muchas Gracias.

ya definí todas los rangos y me funciona perfecto. Ademas cambie algunas cosas para que funcionara solo con doble clik para abrir y al elegir la fecha.

Te lo agradezco. este fue mi primer proyecto en VB XD

(bueno tengo otras consultas en otros temas, que envie antes, creo que tengo solucionado el tema, aunque no como esperaba, te enviare un mail para que lo revises)

¿¿hay posibilidades de tener el calendario en español??

saludos
EDU.

Jorge L. Dunkelman 12 febrero, 2009 23:56  

El idioma del calendario depende de las definiciones del Windows. En el panel de control de Windows, tenes que entrar en el formalurio de definiciones regionales e idioma (Regional and Language Options) y en la pestaña Regional Options cambiar el idioma a Español

Anónimo,  17 febrero, 2009 10:57  

Buenos días Sr. Dunkelman.

Le agradezco enormemente este espacio en el que comparte sus conocimientos ayudando a los que empezamos y queremos aprender.

Me ha costado lo mío y he conseguido crear el calendario en cuestión. El problema del que no salgo, aún y habiendo buscado soluciones a través de Google, es que al hacer clic en la casilla el calendario aparece siempre en la fecha 10-02-09.

Aún poniendo en el ordenador que estamos en otro mes u otro año sigue apareciendo con esa fecha. Ya sé que con [K3=HOY()] saldría la fecha actual, pero lo que quiero es que cuando aparezca el calendario lo haga en el mes y año que estamos.

¿Hay alguna forma de hacerlo?

Gracias y felicidades.

Sergi

Jorge L. Dunkelman 17 febrero, 2009 17:00  

Fijate en el comentario de Felipe Luis Cruz García, donde sugiere agregar la orden

Calendar1.Value = Now

en el evento Userform_Activate

Esto hara que cada vez que se abra el calendario (activate), aparezca con la fecha corriente.

Anónimo,  18 febrero, 2009 13:45  

Buenos días Sr. Dunkelman.

Tan solo le escribo para darle las gracias por su ayuda.
Ha sido usted muy amable y paciente.

Saludos cordiales.

Sergi

Anónimo,  20 febrero, 2009 06:38  

Al ir a la Opcion Herramientas-> Controles adicionales. Controles adicionales esta desacativada y no puedo elegir el Calendar Control. Que puede estar pasando?

Jorge L. Dunkelman 22 febrero, 2009 19:33  

Puede ser que falte el control. Fijate en el enlace que puse en mi comentario del 11 de febrero.
¿Qué versión de Excel estás usando?

Anónimo,  12 marzo, 2009 05:17  

SEÑOR JORGE, mil gracias por tantos conocimientos y ayuda que brinda.

Tengo una pregunta con respecto a este tema de calendario, el rango que yo he utilizado es muy grande, ¿sería posible que el calendario apareciera junto a la celda activa conforme desplazo la hoja hacia abajo?

Gracias nuevamente por su tiempo y atención

Saludos
G7

Anónimo,  12 marzo, 2009 06:23  

SEÑOR JORGE, gracias por su tiempo y atención.

Tengo la siguiente duda sobre este calendario ¿cómo podria arreglar el código para que el calendario se muestra al dar "doble click" en las celdas?

Ya mencionó usted que utilizando el comando Worksheet_BeforeDoubleClick, pero no sé utlizarlo, Ya hice "mi tarea" investigando pero "no doy pie con bola".

Gracias nuevamente

Saludos
G7

Jorge L. Dunkelman 12 marzo, 2009 20:21  

Si sigues las instrucciones de este modelo, el calendario siempre aparece en la parte visible de la hoja, en decir, en la cercanía de la celda activa.

Anónimo,  18 marzo, 2009 14:52  

Jorge, estoy utilizando el DTPicker ya que no tengo el calendario, el inconveniente es que no me copia el valor del calendario a la celda activa ni se cierra al seleccionar una fecha.

Saludos
Federico

Jorge L. Dunkelman 19 marzo, 2009 21:28  

Puedes descagar el Calendar de la WEB, pero tmbi[en puedes usar el DTPicker en un Userform como el Calendar.

Grupo Cinco 04 mayo, 2009 05:14  

Buenas noches: ¿Como se puede hacer para que al elegir una fecha no te permita elegir dias no laborables y feriados? Muchas gracias.

Jorge L. Dunkelman 05 mayo, 2009 19:16  

No puedes evitar que los feriados aparezcan en el control, peropuedes impedir que sean ingresados en la celda usando validación de datos.

Grupo Cinco 05 mayo, 2009 21:39  

Muchisimas gracias por su respuesta y su sugerencia Sr Dunkelman. Sólo voy a abusar de su confianza para realizar un par de preguntas adicionales:

- Veo que esta abierto a realizar trabajos en excel contra un pago ¿Tambien realiza ese tipo de trabajos para desarrollar una interfase para Access? (Lo que sucede es que estoy desarrollando una base de datos en Access con múltiples consultas que se utilizan en el trabajo, pero como no es muy amigable me gustaría dejar algo con una interfase mas amigable para que lo puedan utilizar otras personas aún después que yo deje este puesto).

-2do: ¿Entre sus curiosidades conocerá algún programa de base de datos que origine archivos que se puedan trabajar a la vez por mas de un usuario para el ingreso de datos (estando el archivo en una carpeta compartida)?

Muchas Gracias.

Jorge L. Dunkelman 05 mayo, 2009 22:15  

Grupo Cinco
te sugiero que te comuniques conmigo vía privada por mail (la dirección en el enlace en Contacto)

HECTOR LEAL 04 junio, 2009 17:44  

HOLA JORGE HACE DIAS NO SOCLICITABA TU AYUDA TENGO LA SIGUIENTE Y ESPERO ME PEUDAS AYUDAR

DEBO CARGAR VARIOS DATOS EJEMPLO

COLUMNA A
COLUMNA B
COLUMNA C Y COLUMNA D

NECECITO QUE ME GENERE EN LA COLUMNA E Y F ES POSIBLE
GRACIAS HECTOR LEAL

Jorge L. Dunkelman 04 junio, 2009 21:03  

Hola Héctor,
que me genere qué?
Te sugiero que te pongas en contacto conmigo por mail.

Anónimo,  17 junio, 2009 15:36  

Hola.

Tengo este problemilla, me vendría bien tu ayuda.

Tengo mi calendario implementado en una hoja excel para gastos diarios y por meses.

He linkado una celda al calendario para que en C26 me aparezca la fecha del dia que tengo pinchado en el calendario.

El problema viene porque ahora quiero linkar la celda C27 para que me aparezca el nombre del mes que tenga en ese momento en el calendario.

Como se podria hacer eso?

Gracias y saludos

Jorge L. Dunkelman 17 junio, 2009 18:58  

Hay varias formas. Por ejemplo, en la celda C27 puedes poner esta fórmula
=MES(C26)
que extrae el número del mes de la fecha en la celda C26. Si quieres que aparezca el nombre del mes puedes usar la función ELEGIR, por ejemplo

=ELEGIR(MES(C26),"enero","febrero"...

Juan Fernando 19 agosto, 2009 00:55  

Sr. Jorge Dunkelman:
Exelente la informacion de validacion de datos en celdas de excel con un calendario, seguí todos sus pasos pero de la unica forma que me ha funcionado es teniendo la macro abierta luego de seleccionar la fecha en el calendario de inmediato la coloca en la celda pero se abre la user Form, de´spues de cerrar la user form no me funciona la fecha haciendo click en la siguiente celda. esto fue lo que escribí.

Option Explicit

Private Sub Userform_Click()
Unload Me
End Sub

Private Sub Calendar1_Click()
ActiveCell.Value = Calendar1.Value
Unload Me
End Sub

Sub abrir_calendario()
UserForm1.Show
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngFechas As Range

Set rngFechas = Range("A2:A20")

If Union(Target, rngFechas).Address = rngFechas.Address Then _
Call abrir_calendario


End Sub


No se en que estoy fallando, Nota: yo no soy un experto en excel solo logro cambiar algunas rutinas deacuerdo a un orden logico de las macros para lograr resultados en otras celdas pero es lo unico que se hacer, por su colaboracion muchas gracias.

Jorge L. Dunkelman 19 agosto, 2009 19:37  

Juán Fernando

tengo la impresión que estás poniendo los eventos en módulos corrientes en lugar de los móodulos de la hoja correspondiente. Te sugiero que me mandes el archivo por mail.

Anónimo,  22 agosto, 2009 18:11  

Esto está muy bien. Lo había visto en C# pero no sabía que se pudiera utilizar algo así en excel+VBA claro.
El problema es que la celda no asume el valor. no sé que pasa?
gracias de antemano

Jorge L. Dunkelman 23 agosto, 2009 20:55  

Te sugiero que descargues el archivo con el ejemplo y te fijes cómo se hace.

Luis Tapia,  28 setiembre, 2009 22:24  

Don Jorge,

Antes que todo, muchas gracias por su excelente blog y las respuestas que nos brinda a aquellos que debemos usar regularmente el MS Excel.

Mi consulta es la siguiente, estoy usando el calendario incrustado en una hoja y al seleccionar una fecha en éste tengo el vínculo a una cierta celda, el problema es que no puedo cambiar el formato de la fecha por más que lo intento, siempre aparece como "mm/dd/yyyy". Qué estoy haciendo mal?

Muchas gracias desde ya!!!

Jorge L. Dunkelman 29 setiembre, 2009 17:44  

Don Luis
seguramente ha usado la propiedad LinkedCell del cuadro de propiedades del control para definir la celda que recibe la fecha.
Lo que hay que hacer es dejar esta propiedad en blanco y en su ligar usar un evento para definir la celda y el formato. Por ejemplo

Private Sub Calendar1_Click()
With ActiveCell
.NumberFormat = "dd-mm-yy"
.Value = CDbl(Calendar1.Value)
End With
End Sub

Este código va en el módulo de la hoja.

Posiblemente publique una breve nota sobre el tema con los detalles.

Anónimo,  31 octubre, 2009 23:48  

muy bueno toda la información etregada, muchas gracias

evelyn ruiz 02 noviembre, 2009 18:26  

no se activa mi menu herramientas >> controles adicionales a que crees q se debe

Jorge L. Dunkelman 02 noviembre, 2009 20:44  

Evelyn
no tengo claro lo que estás haciendo. EN el menú Herramientas no existe la opción Controles Adicionales. Tal vez te referís a la barra de controles ActiveX (cuadro de controles)?

Anónimo,  30 noviembre, 2009 21:17  

He revisado y no ha existido una pregunta que me parece válida para el tema y de gran ayuda, ¿habrá forma de lograr que con presionar la tecla "esc" se pueda cerra el calendario? Esto es que casi siempre que cometemos errores o queremos cancelar la acción la tecla "esc" es nuestra salvadora.

Mil gracias poresta y todas tus aportaciones. Las lisonjas serán enviadas a tu correo.

I.Q.I. Jorge A. de México

Jorge L. Dunkelman 30 noviembre, 2009 21:57  

Jorge,
para cerrar el formulario sin cambios basta con apretar la "x" en el ángulo superior izquierdo.
También se ´puede programar para habilitar la tecla ESC para esta función, pero me parece innecesario.

Jorge A. México,  03 diciembre, 2009 20:17  

Jorge,

Agradezco mucho tu atención, y tal vez explayando un poco el por que de mi necesidad(necedad) de la tecla "ESC", generalmente siempre utilizo el teclado por velocidad, evitando siempre utilizar el ratón, por lo que las macros y comando siempre los llamo desde el teclado (hasta algunos como insertar hoja con nombre y quitar autofiltro, por supuesto copyright de usted).

Si me pudieras explicar como programarpara habilitar la tecla, te lo agradecería mucho, si no, de todas maneras quedaré eternamente agradecido por toda la información de su blog.

Atte.

Jorge A. González

Jorge L. Dunkelman 04 diciembre, 2009 17:24  

Hola Jorge,
se puede. La forma que se me ocurre es:
1- en el formulario que contiene el calendario agregás un boton.
2- Hacés doble-clic al botón y en el módulo que se abre ponés este código

Private Sub CommandButton1_Click()
Unload Me
End Sub

3 - Seleccionás el botón y en la ventana de propiedades cambiás la propiedad Cancel a True.

A partir de ahora podés cerrar el calendario con apretando Esc.

El botón podés ocultar arrastrándolo por detrás del calendario.

Jorge A.,  04 diciembre, 2009 19:32  

Jorge,

Quedó, como siempre, impresionado y muy agradecido, ya que tengo un par de formularios que se activan casi de la misma manera que este calendario , y que además me surgía el mismo problema. Ahora esta resuelto.

Gracias!!

Anónimo,  12 enero, 2010 23:30  

¿Como puede modificarse la posicion en la que aparece el calendario?.
Gracias por todo y un cordial saludo,..

Jorge L. Dunkelman 13 enero, 2010 16:33  

EL Userform que contiene al calendario tiene dos propiedades: Left y Top.
Se pueden cambiar los valores programáticamente o manualmente en la ventanilla de las propiedades del objeto.

Anónimo,  14 enero, 2010 02:05  

Hola como hago para que al seleccionar un cliente de la lista desplegable tambien aparezca su direcciòn (en la celda de abajo) es para hacer remisiones.

Uso excel 2007

Gracias

Jorge L. Dunkelman 14 enero, 2010 07:17  

Con alguna de las funciones de búsqueda como BUSCARV o INDICE, por ejemplo.

Anónimo,  16 enero, 2010 01:58  

Hola Tengo un problema con el calendario.

Estoy trabajando con excel 2007 y cuando abro el menú de herramientas, controles adicionales aparece desactivado y no me deja abrirlo. Cómo lo puedo activar?

Muchas gracias

enrique 02 febrero, 2010 08:24  

Super excelente post!!! Te felicito JLD Excel por compartir tus conocimientos, tengo algo de experiencia en excel y macros, pero realmente te vuelas la barda!!
Solo recomiendo a los usuarios que lean TODOS los Blogs, porque las preguntas de la mayoría ya se contestaron :-)
Y deveras: Gracias!!!

Anónimo,  28 marzo, 2010 12:54  

Muy apreciable Jorge:

Te pido por favor que me indiques si existe alguna manera para que el calendario aparezca exactamente a un lado de la celda seleccionada, ya sea a la derecha o a la izquierda o en la esquina superior derecha o izquierda, he seguido todas tus indicaciones y no lo logro, ya probe a cambiar Top, Left, StarUpPosition del userform1, pero me lo coloca o en el centro de la pantalla o en su parte superior, si utilizo valores me la coloca siempre fija, yo quisiera que fuera exactamente a un lado de la celda activa, yo deseo algo parecido a los comentarios de excel. Gracias, espero no estar pidiendo imposibles
Saludos
Alexx
Los Mochis, Sinaloa, México

Jorge L. Dunkelman 03 abril, 2010 13:57  

Hola Alex,
acabo de publicar una nota con una explicación detallada del tema.

Anónimo,  16 mayo, 2010 00:55  

hola sr jorge:

muchas gracias por sus aportes me han sido de gran ayuda, ya tengo insertado varios calendarios.
que formula deberia de emplear para que me dijera los dias que hay entre dos fechas, ej.: del 01/enero al 31/enero me diese 31 dias q tiene el mes

MUCHAS GRACIAS POR SU AYUDA

Jorge L. Dunkelman 16 mayo, 2010 08:29  

Con la función SIFECHA (DATEDIF). Puedes ver la nota sobre el tema en el blog.

Prof. Rene Dominguez 27 junio, 2010 11:22  

Hey muchas gracias me pase buscando este macro para un proyecto personal, realmente he aprendido mucho, me ha resultado y va de marravilla todo lo que he encontrado aqui.
Mi pregunta, habra una manera que se pueda cambiar de celda, aunque no haya seleccionado una fecha en la celda anterior, sin utilizar el boton "X" o la tecla "ESC".
Gracias espero tu respuesta.

Victor 08 abril, 2011 21:39  

EXCELENTE ME FUNCIONO PERO LAS COMPROBACIONES NO, ¿NO SE QUE PASO? MI VERSION ES WIN2007.

Jorge L. Dunkelman 09 abril, 2011 07:49  

Victor,

¿te refieres a la validación? Puedes enviarme el archivo para que vea donde está el problema.

Anónimo,  25 abril, 2011 18:15  

Hola ke tal Excelente tu blog oye un pregunta tengo 2 celdas que em muestran fechas las utilizo para generar un reporte como puedo hacer que la segunda celda la que me limita mi busqueda no sea menor a la fecha inicial

Jorge L. Dunkelman 25 abril, 2011 21:48  

Podés adaptar el modelo que muestro en esta nota (se aplica a horas, pero es el mismo principio para fechas).

Anónimo,  27 abril, 2011 05:54  

Para abrir el calendario con doble clic, cambie en Hoja1 la instrucción dada por Jorge por la siguiente:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rngFechas As Range
Set rngFechas = Range("A2:A20, C2:C20, E2:E20")
If Union(Target, rngFechas).Address = rngFechas.Address Then _
Call abrir_calendario
End Sub

Anónimo,  01 mayo, 2011 06:24  

Hola

he seguido los pasos indicados para que aparezca el calendario cuando queramos elegir una fecha y no consigo que lo haga.
Tengo excel 2003.
Sí, ya sé que esta la explicación detallada, pero a mí no me funciona.

Jorge L. Dunkelman 01 mayo, 2011 06:35  

Fijate en Herramientas-Macro-Seguridad que el nivel establecido permita correr macros.

Anónimo,  01 mayo, 2011 20:09  

Hola

He mirado el nivel de seguridad y está en BAJO.
Consigo poner el calendario en Userform1 pero NO consigo que, en el paso siguiente , cuando marco una fecha del calendario, lo pase a la casilla correspondiente; tan solo, me desaparece la hoja de cálculo.

La explicación tuya inicial esta totalmente correcta?
Dime donde pudo estar cometiendo el error de transcripción.

Saludos

Jorge L. Dunkelman 01 mayo, 2011 22:38  

Estimado, después de 115 comentarios creo que podemos concluir que el modelo tal como está explicado, funciona.
Asegurate que el evento Worksheet_SelectionChange esté en el módulo de la hoja correspondiente y no en un módulo común del Vbe. Otro detalle a controlar es si el rango que activa el evento está indicado correctamente en el código del evento.
También puedes mandarme tu archivo para que vea donde está el problema.

Anónimo,  02 mayo, 2011 01:36  

Hola Jorge
Por fin me ha funcionado
Me faltaba el paso final(creo) que era cerrar y guardar el excel.
Cuando he vuelto a arrancarlo ya me ha funcionado.
De todos modos, gracias por haber estado pendiente.

Un saludo

Carlos 17 mayo, 2011 00:47  

Jorge, gracias por este blog. Es posible tener al mismo tiempo activos el calendario y el Data validation para que la fecha que yo seleccione sea validada antes de escribirla en la celda? Muchas Gracias. Atte. Carlos

Jorge L. Dunkelman 17 mayo, 2011 06:44  

Carlos,
uno de los problemas con validación de datos es que funciona sólo cuando el valor es ingresado en la celda manualmente. Es decir, si copiamos el valor y lo pegamos en la celda o lo ponemos usando el calendario, la validación no funciona.
La forma de superar este problema es programando un evento.
Fijate en esta nota.

Carlos 18 mayo, 2011 01:15  

Hola Jorge, gracias por el link, pero me queda una duda. Lo que necesito es validar si la fecha que selecciono del calendario está "between" las fechas en las celdas L1 y J1. No programo en Visual (aunque me gustaría), qué cambio debo hacer a la rutina que me envías en el link? Muchas gracias de antemano

Jorge L. Dunkelman 18 mayo, 2011 07:01  

Carlos,
no hay que cambiar nada en el código. El cambio hay que hacerlo en la regla de validación. Tendrías que usar una fórmula como

=Y(A1>=$L$1,A1<=$J$1)

donde A1 es la celda a validar.

Jorge 13 junio, 2011 20:24  

Eres grande Muchas gracias!!! Es justo lo que necesitaba :)

Anónimo,  17 junio, 2011 22:11  

Muchas muchas gracias!!

luis 22 junio, 2011 01:52  

puede actualizarse dia a dia la fecha que aparece en el calendario???, porque a mi me aparece siempre la misma


puede ponerse debajo del calendario un boton que diga hoy a al darle clic introduzca la fecha de hoy

Carlos Véliz 22 junio, 2011 22:40  

Hola Jorge, Quisiera consultarte si existe alguna tabla dinámica, que pueda ser segmentada según el teorema de Pareto osea mostrar el 20% de los item que explican el 80% de los valores y el resto agruparlo en un item "otros(as)" integrando el 100% de la muestra. ?

Muchas Gracias

Jorge L. Dunkelman 23 junio, 2011 06:39  

Luis,
fijate en el comentario de Luis F. Cruz Garcia del 28 de julio del 2007.

Jorge L. Dunkelman 24 junio, 2011 19:14  

Carlos,
la consulta no está relacionada con el tema de la nota. De todas maneras, estoy preparando una nota sobre el tema.

Anónimo,  14 julio, 2011 00:14  

Muchas gracias por compartir tus conocimientos!!! lo maximo!!!! una consulta sera posible que al moverse con las flechas del teclado sobre los dias del calendario, y dar enter, quede la fecha seleccionada?

Jorge L. Dunkelman 14 julio, 2011 20:11  

Al moverte con las flechas la fecha va cambiando en la celda vinculada sin necesidad de apretar Enter.

Anónimo,  18 julio, 2011 08:12  

Hola Jorge, siempre leo tu blog y me parece muy bueno tu trabajo y tu ayuda a los que lo necesitan. Soy nueva en este tema y tengo que hacer un trabajo con bases de escel para validar las fechas y horas que pueden haber en un campo. Por ejemplo tengo una bd de 500 registros con diferentes campos uno de ellos fecha de ingreso, otro hora de ingreso, el problema es que aveces alguno de los registros vienen con fechas pero mal escritas o con otro año u otro mes como: 06/072011 o 0607/2011 o 06/07/2001 sabiendo que estamos en el año 2011, en el caso de las horas vienes 15.35 en vez de 15:35. Estos casos son en algunos registros de la bd quisiera saber si se puede hacer una macro para corregir estos errores en una bd.

Jorge L. Dunkelman 18 julio, 2011 21:13  

Si el error o los errores son consistentes, es decir que siguen cierta regla, podemos corregirlos manualmente o con una macro.
Por ejemplo, si en el campo de las horas el error es siempre el uso de "." en lugar de ":", podemos seleccionar todo el campo y usar buscar y reemplazar (Ctrl+L) para solucionar el problema. La misma acción puede ser hecha con una macro.
El caso de las fechas es un poco más complejo ya que tenemos que detectar donde falta el "/". Una vez corregido el formato tendríamos que corregir el año. Aquí ya vale la pena usar una macro.

Anónimo,  19 julio, 2011 08:11  

Muchas gracias Jorge ampliaste mi panorama con tu respuesta.

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP