Internamente, las fechas Excel almacena como números. No implementa un tipo de fecha. El número es el número de días desde algún punto en el pasado (1900 o 1904, dependiendo del sistema de operación, con algunos errores incorporados con respecto a los años bisiestos). El tiempo se representa como la parte fraccional del número.
Para que parezca una fecha para el usuario, debe asignarle a la celda un formato de fecha. Luego, el número se muestra como una fecha en la celda. (Excel asigna un formato de fecha automática al introducir tantos que se parece a una fecha a Excel.)
Cuando se utiliza ActiveWorkbook.ActiveSheet.Cells(x,y)
, se crea un objeto Range
y llamar a su propiedad por defecto, que es Value
. Value
tiene mucha magia incorporada. En su caso, mira el formato de la celda y, al ver un formato de fecha, convierte el número almacenado internamente en Variant
de la fecha del subtipo. Cuando lo muestra usando un cuadro de mensaje, el siguiente truco sucede. Si la hora es 0:00, la fecha se convierte en una cadena sin tiempo. Si el tiempo fuera diferente de 0:00, se convertiría a una cadena con fecha y hora. El formato de fecha se toma de la configuración de su usuario. Es independiente del formato de fecha que ha asignado a la celda de Excel.
Si utiliza Value2
en lugar de Value
(por ejemplo, mediante el uso de una caja messag para mostrar ActiveWorkbook.ActiveSheet.Cells(x,y).Value2
), entonces usted verá la representación interna de la fecha, es decir un número.
Cuando edita una celda, Excel usa otro formato de fecha para que pueda ver y editar todas las partes de la fecha: año, mes, día y posiblemente hora, minutos y segundos. Esto se debe a que el formato de fecha de su celda podría estar restringido solo al nombre del mes.
Otra complejidad se agrega por la internacionalización. Ciertos formatos de fecha no se aplican directamente, pero son una sugerencia para usar un formato de fecha de la configuración actual del usuario.Entonces el formato primero se reemplaza con otro formato de fecha y luego se aplica. Además, ciertas partes de los formatos de fecha y hora se ven afectadas por la configuración del usuario. Y finalmente, los patrones del formato de fecha están traducidos (en inglés, yyyy
significa el año, en alemán es jjjj
). Cuando se guarda la hoja de cálculo de Excel, estos formatos se almacenan en el formato en inglés para que la hoja pueda abrirse mediante instalaciones de usuario y de Excel con cualquier idioma. En su caso, la internacionalización probablemente afecte el formato de fecha utilizado cuando edita la celda (poner el mes anterior al día y usar la visualización de 12 horas con AM/PM se parece a América del Norte).
No entiendo por qué Excel muestra "7/22/2011 12:00:00 AM" (en lugar de "22/07/2011 0:00:00 AM"). Estoy bastante seguro de que su fecha/hora tiene una parte de tiempo de "0:00". Pero el número interno (como lo revela el Value2
) le dirá con seguridad.
Puede haber una diferencia entre el valor de una celda y lo que se muestra. Si el valor de la celda se ingresó solo el 22/7/2011 (sin componente de tiempo) pero la celda está formateada para mostrar la hora, entonces esto tendría sentido. En el caso del cuadro de mensaje, no está haciendo ningún formato, solo mira el valor "en bruto", por lo que solo obtiene la fecha ... Si desea el valor mostrado, utilice ActiveSheet.Cells (x, y) .Text –