viernes, mayo 18, 2007

Validar fechas en Excel con un calendario

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 comentarios:

  1. Gracias, Jorge era precisamente lo que estaba buscanda.

    Att:

    Julian P.

    ResponderBorrar
  2. 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

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

    LES ANEXO TABLA
    MUCHAS GRACIAS

    ResponderBorrar
  4. 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.

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

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

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

    ResponderBorrar
  8. 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

    ResponderBorrar
  9. 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).

    ResponderBorrar
  10. 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.

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

    ResponderBorrar
  12. 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

    ResponderBorrar
  13. 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"

    ResponderBorrar
  14. 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

    ResponderBorrar
  15. 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.

    ResponderBorrar
  16. 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 !!!

    ResponderBorrar
  17. Perdona, este es el fichero bueno:



    Hoja Control formulario

    ResponderBorrar
  18. Hola Petit

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

    ResponderBorrar
  19. 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

    ResponderBorrar
  20. 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

    ResponderBorrar
  21. 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.

    ResponderBorrar
  22. 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.

    ResponderBorrar
  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.

    ResponderBorrar
  24. 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?

    ResponderBorrar
  25. 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")

    ResponderBorrar
  26. 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

    ResponderBorrar
  27. 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.

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

    ResponderBorrar
  29. 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.

    ResponderBorrar
  30. 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.

    ResponderBorrar
  31. Hola Álvaro

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

    ResponderBorrar
  32. 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?

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

    ResponderBorrar
  34. 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

    ResponderBorrar
  35. 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.

    ResponderBorrar
  36. 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.

    ResponderBorrar
  37. 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

    ResponderBorrar
  38. 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

    ResponderBorrar
  39. 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").

    ResponderBorrar
  40. Hola Carlos

    progrmando el evento Worksheet_BeforeDoubleClick

    ResponderBorrar
  41. 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.

    ResponderBorrar
  42. 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.

    ResponderBorrar
  43. 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.

    ResponderBorrar
  44. 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.

    ResponderBorrar
  45. 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.

    ResponderBorrar
  46. 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.

    ResponderBorrar
  47. 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

    ResponderBorrar
  48. 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.?

    ResponderBorrar
  49. 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

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

    ResponderBorrar
  51. 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

    ResponderBorrar
  52. 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

    ResponderBorrar
  53. 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.

    ResponderBorrar
  54. 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.

    ResponderBorrar
  55. 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

    ResponderBorrar
  56. 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.

    ResponderBorrar
  57. 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?

    ResponderBorrar
  58. 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

    ResponderBorrar
  59. 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

    ResponderBorrar
  60. 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

    ResponderBorrar
  61. Puedes descargar el control que te falta aquí

    ResponderBorrar
  62. 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)

    ResponderBorrar
  63. 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).

    ResponderBorrar
  64. 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

    ResponderBorrar
  65. 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.

    ResponderBorrar
  66. 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

    ResponderBorrar
  67. 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

    ResponderBorrar
  68. 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.

    ResponderBorrar
  69. 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

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

    ResponderBorrar
  71. 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?

    ResponderBorrar
  72. 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

    ResponderBorrar
  73. 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

    ResponderBorrar
  74. 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.

    ResponderBorrar
  75. 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

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

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

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

    ResponderBorrar
  79. 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.

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

    ResponderBorrar
  81. 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

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

    ResponderBorrar
  83. 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

    ResponderBorrar
  84. 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"...

    ResponderBorrar
  85. 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.

    ResponderBorrar
  86. 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.

    ResponderBorrar
  87. 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

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

    ResponderBorrar
  89. 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!!!

    ResponderBorrar
  90. 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.

    ResponderBorrar
  91. muy bueno toda la información etregada, muchas gracias

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

    ResponderBorrar
  93. 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)?

    ResponderBorrar
  94. 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

    ResponderBorrar
  95. 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.

    ResponderBorrar
  96. Jorge A. México03 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

    ResponderBorrar
  97. 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.

    ResponderBorrar
  98. 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!!

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

    ResponderBorrar
  100. 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.

    ResponderBorrar
  101. 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

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

    ResponderBorrar
  103. 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

    ResponderBorrar
  104. 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!!!

    ResponderBorrar
  105. 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

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

    ResponderBorrar
  107. 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

    ResponderBorrar
  108. 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.

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

    ResponderBorrar
  110. Victor,

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

    ResponderBorrar
  111. 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

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

    ResponderBorrar
  113. 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

    ResponderBorrar
  114. 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.

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

    ResponderBorrar
  116. 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

    ResponderBorrar
  117. 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.

    ResponderBorrar
  118. 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

    ResponderBorrar
  119. 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

    ResponderBorrar
  120. 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.

    ResponderBorrar
  121. 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

    ResponderBorrar
  122. 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.

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

    ResponderBorrar
  124. Muchas muchas gracias!!

    ResponderBorrar
  125. 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

    ResponderBorrar
  126. 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

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

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

    ResponderBorrar
  129. 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?

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

    ResponderBorrar
  131. 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.

    ResponderBorrar
  132. 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.

    ResponderBorrar
  133. Muchas gracias Jorge ampliaste mi panorama con tu respuesta.

    ResponderBorrar