Hola a todos. Ya he solucionado lo que quería, pero como pasa siempre, luego surge otra cosa.
El nuevo problema es que los campos tipo fecha, que en la consulta original aparecen bien formateados (fecha corta dd/mm/aaaa), una vez hecha la exportación, en los que se puede confundir/intercambiar dd/mm por mm/dd (por ejemplo 01/01/yyyy) los exporta como número. Una fecha 27/10/aaaa la exporta bien.
Tengo que probar a exportar a una plantilla que tenga esa columna formateada como fecha a ver si no ocurre esto.
Os dejo el código que he adaptado por si a alguien le sirve.
El recordset que he probado es una tabla de 3 o 4 campos de texto y fecha con 4 registros. A la función se le pasa el nombre de la consulta como parámetro.
Saludos.
Public Function fExportaRstCalc(ByRef sSQL As String, Optional sNombrePestaña As String = "Hoja1")
'http://www.vbforums.com/showthread.php?558179-Exporting-to-OpenOffice-Calc
'USO: fExportaRstCalc("qryPrueba")
On Error GoTo fExportaRstCalc_Error
Dim oServicio, oEscritorio, oDocumento, oHoja As Object
Dim aNoArgs()
Dim fldCount As Integer
Dim iCol As Integer
Dim nFila As Long
Dim rsTemp As DAO.Recordset
Set rsTemp = CurrentDb.OpenRecordset(sSQL)
If rsTemp.EOF = False Then
rsTemp.MoveFirst
Else
Exit Function
End If
Set oServicio = CreateObject("com.sun.star.ServiceManager")
Set oEscritorio = oServicio.createInstance("com.sun.star.frame.Desktop")
Set oDocumento = oEscritorio.loadComponentFromURL("private:factory/scalc", "_blank", 0, aNoArgs())
' Cambia el nombre de la primera hoja
Set oHoja = oDocumento.getSheets().getByIndex(0)
oHoja.Name = sNombrePestaña
' Inserta los nombres de los campos del recordset a la primera fila de la hoja de cálculo
fldCount = rsTemp.Fields.Count
nFila = 0
For iCol = 1 To fldCount
Call oHoja.getCellByPosition(iCol - 1, nFila).setFormula(rsTemp.Fields(iCol - 1).Name)
Call oHoja.getCellByPosition(iCol - 1, nFila).setPropertyValue("HoriJustify", 2) 'Justificar Centro fila encabezados
Next
' Inserta los valores de los campos del recordset en las filas sucesivas de la hoja de cálculo
nFila = 1
Do While Not rsTemp.EOF
For iCol = 0 To fldCount - 1
Call oHoja.getCellByPosition(iCol, nFila).setFormula("" & rsTemp.Fields(iCol).Value)
Next
nFila = nFila + 1
rsTemp.MoveNext
Loop
rsTemp.Close
Set rsTemp = Nothing
Set oHoja = Nothing
Set oDocumento = Nothing
Set oEscritorio = Nothing
Set oServicio = Nothing
done:
Exit Function
fExportaRstCalc_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") en fExportaRstCalc, Módulo basOpenOffice."
rsTemp.Close
Set rsTemp = Nothing
Set oHoja = Nothing
Set oDocumento = Nothing
Set oEscritorio = Nothing
Set oServicio = Nothing
Resume done
End Function