Hola a todos,
Estoy creando una aplicación en la que tengo que pasar los registros de una base de datos .mdb a un archivo de Excel .xls. En mi código ya consigo crear el archivo excel e introducir algunos registros en el archivo, pero tengo dos problemas.
El primero es que tras haber creado y guardado el archivo, me aparece correctamente en el directorio que ha elegido el usuario, pero al abrirlo con el excel siempre se me abre el fichero creado más otro llamado Libro1.xls que ni siquiera aparece en el directorio.
El segundo problema es que no consigo que se guarden todos los registros de la base de datos en el archivo excel. Para ello creo un bucle hasta encotrar el EOF del recordset. Dentro de este bucle (el principal) voy rellenando el fichero de excel por filas y columnas. Si en segundo bucle de las filas introduzco un valor máximo entero (5 o 6) funciona pero sólo me guarda los 5 o 6 "
últimos" registros de la base de datos. Además si pongo un numero mayor de 6 se me vuelve a colgar (la base de datos que tengo para pruebas contiene 30 registros). Debería recorrer el recordset hasta el total de registros (rs.RecordCount) que contiene, pero se me cuelga el programa.
Aquí os presento mi código: (fijaos que en la línea 34 el bucle for es hasta el valor 6 pero debería ir puesto rs.RecordCount)
Dim i As Long
Dim j As Long
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
dbname = App.Path
If Right$(dbname, 1) <> "" Then dbname = dbname & ""
dbname = dbname & "DatosVueloDB.mdb"
Set db = OpenDatabase(dbname)
' Obtener los records o valores.
Set qdef = db.CreateQueryDef("", "SELECT * FROM Tabla")
Set rs = qdef.OpenRecordset(dbOpenSnapshot)
Dialogo.DialogTitle = "Destino - Seleccione el archivo de destino"
Dialogo.Filter = "Archivos de Datos (*.csv)|*.csv |Archivo de Excel (*.xlsx)|*.xlsx"
Dialogo.ShowOpen
Dialogo.FileName <> "" And Dialogo.FilterIndex = 2 Then
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add
For i = 1 To rs.Fields.Count
xlSheet.Cells(1, i).Value = rs.Fields(i - 1).Name 'Relleno la primera fila del fichero excel con el nombre de los campos
Next i
Do While Not rs.EOF
For j = 2 To 6 'rs.RecordCount ' empiezo a rellenar desde la segunda fila hasta el total de registros de la base de datos
For i = 1 To rs.Fields.Count ' empiezo a llenar las columnas hasta el total de campos de la base de datos
xlSheet.Cells(j, i).Value = rs.Fields(i-1).Value
Next i
rs.MoveNext 'Siguiente registro
Next j
Loop
xlSheet.SaveAs Dialogo.FileName 'guardo el fichero excel con el nombre del usuario
xlApp.Quit 'cierro todo, fichero y conexion de la base de datos
Set xlApp = Nothing
'Set xlBook = Nothing
Set xlSheet = Nothing
rs.Close
db.Close
Espero que podáis ayudarme. He mirado por todos los lados pero para pasar de .mdb a .xls hay poca información. Sólo encuentro información para hacer el paso contrario. Pero esto no me sirve.
Espero que me podáis ayudar. Muchas gracias por adelantado.
Saludos
Alejos