Exportar base de datos access a excel

Quisiera ver si me pueden ayudar por favor.
Estoy haciendo una base de datos en access con visual basic pero tengo una duda enorme, quisiera saber si puedo exportar esa base de datos a excel.
1

1 respuesta

Respuesta
Entiendo que estás trabajando desde el Visual Studio, no desde VBa (desde Access sería directo).
Lo que yo haría es un procedimiento usando las librerías de Microsoft Excel. Sería algo así:
Sub enviarDeAccessAlExcel()
    Dim miXls As New Excel.Application
    Dim miWb As New Excel.Workbook
    Dim db As Database
    Dim rs As Recordset
    Dim i As Integer
    Dim nLin As Long
    ' Creamos un nuevo libro de Excel
    Set miWb = miXls.Workbooks.Add()
    ' Abrimos la base de datos y tabla a exportar
    Set db = OpenDatabase("nombreBaseDeDatos", False, True)
    Set rs = db.openrecordset("nombreTabla")
    ' Escribimos los nombres de campos en la fila 1
    For i = 0 To rs.Fields.Count - 1
        miWb.ActiveSheet.cell(1, i + 1) = rs.Fields(i).Name
    Next i
    ' Escribimos los registros (los campos nulos los saltamos)
    nLin = 1
    If Not rs.EOF Then rs.MoveFirst
    Do While Not rs.EOF
        nLin = nLin + 1
        For i = 0 To rs.Fields.Count - 1
            If Not IsNull(rs.Fields(i)) Then miWb.ActiveSheet.cell(nLin, i + 1) = rs.Fields(i)
        Next i
        rs.MoveNext
    Loop
    ' Cerramos la tabla y base de datos
    Rs. Close
    Db. Close
    ' Cerramos el Excel
    MiWb. Close True, "NOMBRE DEL FICHERO DE SALIDA"
    MiXls. Quit
    Set miWb = Nothing
    Set miXls = Nothing
End Sub
Este código está para accesos al Access mediante DAO. Si usas el ADO deberás cambiarlos.
No olvides incluir la librería de "Microsoft Excel".
Muchas gracias por tu respuesta, es muy útil pero la conexión que yo hago con access es mediante un data, ¿entonces solo tengo que sustituir las lineas de conexión y las del recordset? ¿O hay que hacer otro código?
Muchas Gracias por tu apoyo. Saludos
SI haces el acceso mediante un data, el propio control tendrá la propiedad 'recordset'.
En ese caso, sustituye "rs" por "data.recordset" y te sobraría la apertura/cierre de la base de datos y de "rs" (ya los abrirá tu data).
El resto debería ser igual.
Oye que crees que ya hice eso y aparte el código lo metí en un botón pero que crees que me manda el error de: "El objeto no admite esta propiedad o método". Te dejo el código haber si le puedes echar un ojo y me ayudes para ver porque tengo ese error. Te marco la linea del error en negritas.
Private Sub Command1_Click()
    Dim miXls As New Excel.Application
    Dim miWb As New Excel.Workbook
    Dim i As Integer
    Dim nLin As Long
    ' Creamos un nuevo libro de Excel
    Set miWb = miXls.Workbooks.Add()
    ' Abrimos la base de datos y tabla a exportar
    'Set db = OpenDatabase("nombreBaseDeDatos", False, True)
    'Set rs = db.OpenRecordset("nombreTabla")
    ' Escribimos los nombres de campos en la fila 1
    For i = 0 To Data1.Recordset.Fields.Count - 1
        miWb.ActiveSheet.cell(1, i + 1) = Data1.Recordset.Fields(i).Name
    Next i
    ' Escribimos los registros (los campos nulos los saltamos)
    nLin = 1
    If Not Data1.Recordset.EOF Then Data1.Recordset.MoveFirst
    Do While Not Data1.Recordset.EOF
        nLin = nLin + 1
        For i = 0 To rs.Fields.Count - 1
            If Not IsNull(Data1.Recordset.Fields(i)) Then miWb.ActiveSheet.cell(nLin, i + 1) = Data1.Recordset.Fields(i)
        Next i
        Data1.Recordset.MoveNext
    Loop
   ' Cerramos el Excel
    miWb.Close True, "C:\bancos.xls"
    miXls.Quit
    Set miWb = Nothing
    Set miXls = Nothing
End Sub
Gracias espero que me puedas ayudar una vez más. Saludos
Prueba cambiando el bucle "for" para que vaya desde 1 hasta "recordset.fields.count".
Cuando se trabaja con DAO los campos van numerados del 0 al count-1, pero con ADO (y creo que el data también) lo hace de 1 hasta count.
El for (en los dos casos que aparece en el código) quedaría:
For i = 1 To Data1.Recordset.Fields.Count
Oye que crees que ya cambie el for como me dijiste pero no se arregla, sigue el mismo error, espero que puedas ayudarme por favor. Gracias. Saludos
Pues de momento sólo se me ocurre que vuelvas al código original y que abras el recordset con DAO (tendrás que incluirlo en las referencias la última versión).
Para abrir el recordset yo utilizaría el mismo código que estés usando en el data.
Supongo que debería funcionar. Si no sólo se me ocurre que me envíes el programa y la base de datos para ver el problema en mi casa (por aquí es complicado localizar los errores).
Mmm. Pues creo que esto no me ah ayudado de mucho :( de nada me sirve tener el código si no funciona, bueno de todas maneras gracias por la ayuda, ya investigare después.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas