aca va un ejemplo, yo trabajo con un datacontrol (data) y un grid (grid)
Dim xlapp As Excel.Application
Dim prueba as Excel.Workbook
Dim hoja1 As Excel.Worksheet
Dim TotalReg As Double
Dim totalcol As Integer
cDialog.ShowSave
Set xlapp = New Excel.Application
xlapp.Workbooks.Add
Set prueba = xlapp.Workbooks(xlapp.Workbooks.Count)
En vez de esta ultima linea tambien puede ir:
set prueba = xlapp.workbooks.add
Set hoja1 = prueba.Worksheets.Add
With data.Recordset
.MoveLast
TotalReg = .RecordCount
.MoveFirst
totalcol = grid.Columns.Count
For i = 0 To totalcol - 1 ' pasa encabezados
hoja1.Cells(1, i + 1).Value = data.Recordset.Fields(i).Name
Next i
'pasa los datos
hoja1.Range("A3").CopyFromRecordset data.Recordset
'guardar el archivo con el nombre introducido por el usuario
prueba.SaveAs cDialog.filename
Set hoja1 = Nothing
Set prueba = Nothing
Set xlapp = Nothing
Espero te sirva. La variable prueba en windows xp tuve que declararla sin tipo (variant), sino me daba error..