none
¿Fallo en Excel 2016? RRS feed

  • Pregunta

  • Pregunta: ¿Es esto un fallo de Excel 2016?

    Partimos de que hoy es día 4/mar/2021

    Tengo en un VBA:

    Dim Dia As Integer, Mes As Integer, Anio As Integer

    Dim idx_row_min As Integer      

    Dia = Day(Now)

                  Mes = Month(Now)

                  Anio = Year(Now)

    Paso a paso por las instrucciones el valor de Dia = 4, el de Mes = 3 y el de Año = 2021 como no podía ser de otra manera.

    Continuamos paso a paso y tengo:

                    Fechas(idx_row) = Day & "/" & Month & "/" & Year

    Fechas(idx.row) toma el siguiente valor 4/3/2021 como no podía ser de otra manera.

    Pues bien, ahora pongo:

             

    Fecha=Fechas(idx_row)

    Range("P6").Activate

                  ActiveCell.Value = Fecha

    Y en P6 se escribe: 3-abr.-21.  Es decir, cambia el mes por el día y el día por el mes.

    Para verificar si mi procedimiento tiene algún error y después de un minucioso estudio del mismo he cambiado sólo estas tres líneas:

    Dia = Day(Now) + 10

                  Mes = Month(Now) + 7

                  Anio = Year(Now)

    Y queda: Día = 14, mes = 10, año = 2021 lo demás lo he dejado exactamente igual.

    Pues bien, ahora en P6 escribe 14-Oct.-21.

    En resumen:

    Si mi procedimiento es este:

          Dim Dia As Integer, Mes As Integer, Anio As Integer

          Dim idx_row_min As Integer

    Dia = Day(Now)

                  Mes = Month(Now)

                  Anio = Year(Now)

    Fechas(idx_row) = Day & "/" & Month & "/" & Year

    Fecha=Fechas(idx_row)

    Range("P6").Activate

    ActiveCell.Value = Fechas(idx_row_min)

    P6 tiene el día cambiado por el mes y viceversa. (3-abr.-21) cuando correspondería (4-mar.-2021)

    Ahora bien, si mi procedimiento es este otro:

         Dim Dia As Integer, Mes As Integer, Anio As Integer

         Dim idx_row_min As Integer

    Dia = Day(Now) + 10

                  Mes = Month(Now) + 7

                  Anio = Year(Now)

    Fechas(idx_row) = Day & "/" & Month & "/" & Year

    Range("P6").Activate

    ActiveCell.Value = Fecha

    P6 tiene un valor correcto. (14-oct.-21).

    Como prueba adicional he hecho lo siguiente:

    He puesto en la celda A1 un número que representa al día (4) en la celda B1 otro número que representa al mes (3) y en C1 otro número que representa el año (2021) y Dia, Mes y Año en mi procedimiento toman estos valores, con idéntico resultado:

    Si pongo A1=4, B1=3 y C1=2021. Error en P6=3-abr.-2021.

    Si pongo A1=21, B1=12, C1=2021 No hay error en P6=21-dic.-2021.

    Increíble pero cierto. Y da exactamente igual que se cambie o no la configuración de fecha en P6.

    Saludos

    José


    jueves, 4 de marzo de 2021 13:01

Todas las respuestas

  • Hola!

    no veo que tipo de variable es la matriz Fechas, probablemente variant o string, declárala como Date() utiliza dateserial para construir la fecha, nada de concatenar variables y prueba


    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/

    viernes, 5 de marzo de 2021 15:47
  • Muchas gracias por su respuesta.

    La variable Fechas era String, la he cambiado por Date y el resultado es exactamente el mismo.

    Para mi EXCEL hoy es 3/may./2021 Cuando realmente es 5/mar./2021.

    Esto es increíble.

    Saludos

    José

    viernes, 5 de marzo de 2021 16:18
  • Emilio, buenas tardes de nuevo, perdona que le vuelva a molestar pero por ampliar la información porque creo que me voy a volver loco con tanto desatino en una cosa tan sencilla.

    Observe lo siguiente, que a mi modo de ver es inexplicable, Observe los cambios:

    Día real de hoy 5-mar.-2021

    Con esto:

        Dia = Day(Now) + 21

        Mes = Month(Now) + 8

        Anio = Year(Now) – 1

        Fechas(idx_row) = Day & "/" & Month & "/" & Year

    Esto da una fecha de: 26-nov.-2020

    Correcto.

    Con esto:

        Dia = Day(Now)

        Mes = Month(Now)

        Anio = Year(Now)

        Fechas(idx_row) = Day & "/" & Month & "/" & Year

    Esto da una fecha de: 3-May.-2021, 

    Incorrecto

    es decir, (M/D/A) pone el día en el mes y el mes en el día, mientras que en el anterior es correcto (D/M/A) 

    Observamos que da correcto en un caso y en el otro incorrecto cuando se especifica Día/Mes/Año

    Con esto:

        Dia = Day(Now) + 21

        Mes = Month(Now) + 8

        Anio = Year(Now) – 1

        Fechas(idx_row) = Month & "/" & Day & "/" & Year

    Esto da una fecha de: 26-nov.-2020

    Correcto

    Con esto:

        Dia = Day(Now)

        Mes = Month(Now)

        Anio = Year(Now)

        Fechas(idx_row) = Month & "/" & Day & "/" & Year

    Esto da una fecha de: 5-mar.-2021

    Correcto

    Pero observamos que da correcto en ambos casos sólo cuando se especifica Mes/Día/Año, es decir se pone al revés de lo que muestra, mientras que en el primer caso sólo da correcto si el mes tiene 2 dígitos pero da error si el mes sólo tiene un dígito.

    ¿Es para volverse loco, o no?

    Saludos

    José

    PD. Muchas gracias por su atención y su tiempo.

    viernes, 5 de marzo de 2021 19:17
  • Creo que te deje claro que no construyeras la fecha concatenando valores sino que utilizaras DateSerial para construirla, VBA maneja las fechas en formato americano, mm/dd/yy, por lo que concatenando las invertirá, a menos que el día sea mayor de doce, en cuyo caso, puesto que no hay mas que doce meses, tomará correctamente los valores.

    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/

    sábado, 6 de marzo de 2021 4:45
  • Gracias Emilio, por tu tiempo y tu paciencia conmigo.

    Ya está resuelto, pero no deja de ser curioso.

    Si pones:

    Range(“P2”).Activate

    ActiveCell.Value = Fecha

    En el modo paso a paso se vea al poner el cursor encima de fecha: 5/3/21 lo cual es correcto

                                  Pero en P2 escribe: 3/5/21 (incorrecto)

    Si pones:

                   Range(“P2”).Activate

    fecha = Format(fecha, "dd/mm/yyyy")

    ActiveCell.Value = fecha

    En el modo paso a paso se vea al poner el cursor encima de fecha: 5/3/21 lo cual es correcto

                                  Pero en P2 escribe: 3/5/21 (incorrecto)

    Ahora bien, si pones:

                   Range(“P2”).Activate

    fecha = Format(fecha, "dddd-dd/mm/yyyy")

    ActiveCell.Value = fecha

    En el modo paso a paso se vea al poner el cursor encima de fecha: viernes-5/3/2021 lo cual es correcto

                                  Y en P2 escribe lo mismo: viernes-5/3/2021

    Evidentemente, todo ello sin DateSerial

    Repito, muchas gracias por todo.

    Saludos

    José

    sábado, 6 de marzo de 2021 16:48
  • Realmente no puedo entender para que preguntas si luego no te molestas en hacer caso de las repuestas recibidas, tu sabrás lo que haces, pero por favor. no hagas perder el tiempo a los demás. 

    Saludos a todos desde Huelva Emilio http://www.mvp-access.es/emilio/

    sábado, 6 de marzo de 2021 17:18
  • Perdona Emilio.

    Lo he resuelto como usted me ha dicho, pero en mi anterior respuesta cero que he escrito: "Ya está resuelto, pero no deja de ser curioso." lo que no necesariamente quiere decir que lo haya resuelto así.

    Saludos

    José

    Espero no hacerle perder el tiempo más.

    sábado, 6 de marzo de 2021 21:06