Gracias
Egostar.
También yo en esa miniaplicación que te comentaba realizaba el traspaso utilizando
DateTimeToString, lo cual es idéntico a usar
FormatDateTime (en realidad
FormatDateTime es una función que llama al procedimiento
DateTimeToString pasándole el resultado,
result, como parámetro por referencia), y tomando el formato de la configuración de Windows, en mi caso nada de
DisplayFormat ya que esas fechas no las obtenía de un DataSet.
En realidad, y después de revisarlo de nuevo, aunque se formatee el valor correctamente (tomando la configuración de Windows), Excel no cambia el formato de la celda, sino que ésta mantiene el que tenía cuando se diseñó, lo cual también me parece lógico.
Lo que no conocía era el uso del comando
NumberFormat, el cual me ha permitido hacer lo que quería, que es asegurarme de que aparte del valor pasado, Excel tome dicha celda como lo que es, una fecha, y no un texto con apariencia de fecha. Esto lo he logrado de esta forma:
WSh.Cells[i, ColFecha].NumberFormat := 'dd/mm/aaaa';
No trabajo con rangos, así que omito lo de ExcelRange que traía tu ejemplo. Asignándole esa cadena, Excel me convierte el formato de la celda a Fecha con dicho formato. Lo curioso es que si le paso un formato en notación anglosajona, "dd/mm/yyyy", no lo acepta, lo toma como texto y me saca algo como esto en la celda: "22/04/yyyy", es de esas chapuzas incomprensibles de Microsoft en su afán de traducir hasta los comandos de sus aplicaciones, si mi programa corriera en una máquina con otro idioma fallaría
Pero lo del
NumberFormat sí funciona, aunque el valor que le asigno no he visto necesidad de declararlo como
OLEVariant, me sirve como una cadena simple o como un literal (como en el ejemplo).
Saludos