Usuario
¿Fallo en Excel 2016?

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é
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/
-
-
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.
-
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/
-
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é
-
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/
-
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.