Exportar de Access a Excel, ayuda

Quería hacerte una consulta para exportar de Access a Excel, encontré un código que me ayudo mucho, es el código entregado rodolfo1245, pero necesito hacer unas modificaciones que me tienen un poco complicado. El código es el siguiente:
Private Sub Comando0_Click()
Dim H As Long 'Horizontal
Dim V As Long 'Vertical
Dim MiBase As Database
Dim MiTabla As Recordset
On Error GoTo ErrorExcel
Dim objExcel As Excel.Application
Set MiBase = OpenDatabase("bd1.mdb")
Set MiTabla = MiBase.OpenRecordset("SELECT * FROM Tabla1, tabla2 WHERE tabla1.ID=tabla2.ID_1", dbOpenDynaset)
If MiTabla.RecordCount = 0 Then
MsgBox "La base de datos esta vacia"
Exit Sub
End If
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.SheetsInNewWorkbook = 1
objExcel.Workbooks.Add
With objExcel.ActiveSheet
.Range(.Cells(1, 1), .Cells(1, 4)).Borders.LineStyle = xlContinuous
.Cells(3, 1) = "NOMBRE"
.Cells(3, 2) = "DIRECCION"
.Cells(3, 3) = "SERVICIO"
.Cells(3, 4) = "CANTIDAD"
.Range(.Cells(3, 1), .Cells(3, 4)).Font.Bold = True
.Columns("D").HorizontalAlignment = xlHAlignRight
.Columns("A").ColumnWidth = 15
.Columns("B").ColumnWidth = 30
.Columns("C").ColumnWidth = 30
.Columns("D").ColumnWidth = 15
End With
objExcel.ActiveSheet.Cells(1, 1) = "Inversión Planta Externa"
objExcel.ActiveSheet.Range(objExcel.ActiveSheet.Cells(1, 1), objExcel.ActiveSheet.Cells(1, 4)).HorizontalAlignment = xlHAlignCenterAcrossSelection
With objExcel.ActiveSheet.Cells(1, 1).Font
.Color = vbRed
.Size = 14
.Bold = True
End With
H = 4
V = 1
Do While Not MiTabla.EOF
DoEvents
objExcel.ActiveSheet.Cells(H, V) = MiTabla.Fields!ID_CLIENTE
objExcel.ActiveSheet.Cells(H, V + 1) = MiTabla.Fields!DIRECCION
objExcel.ActiveSheet.Cells(H, V + 2) = MiTabla.Fields!SERVICIO
objExcel.ActiveSheet.Cells(H, V + 3) = MiTabla.Fields!CANTIDAD
H = H + 1
MiTabla.MoveNext
Loop
MiBase.Close
Set objExcel = Nothing
Exit Sub
ErrorExcel:
MsgBox "Ha ocurrido un error de conexión con Excel." _
& Chr(13) & Chr(13) & "Error : " & Err.Number _
& Chr(13) & "Info : " & Err.Description _
& Chr(13) & "Objeto : " & Err.Source _
End Sub
Lo que necesito hacer es que exporte solo los datos del formulario activo (no se si me explico muy bien en esto, pero me refiero al formulario con los datos que se están viendo en ese momento).
Además mi base en access tiene 3 tablas donde las relaciones son algo así: Tabla1 con Tabla2 y Tabla1 con Tabla3.
Pude hacer que al exportar lo haga con datos de la tabla1 con tabla2 modificándolo como aparece en el código, pero necesito que en la misma hoja de excel donde me exporto estos datos, haga lo mismo (más abajo en la hoja excel) pero ahora con los datos de la tabla1 con Tabla3.
Espero haber explicado bien el problema y ojala puedas ayudarme.
Respuesta
1
Pues el proceso que presentas lo accedes utilizando un grid que se muestra en pantalla la selección realizada de tu base de access desde el principio.
Ahí deberás de indicar la nueva consulta y exportar todos los datos del grid que se presenta en pantalla de la misma forma...
Si son dos consultas o dos grids, pues tienes que recorrer uno y luego el otro...
Lo que necesito ea que me filtre la información, ya que esto lo hace para toda la tabla y tengo una base con 3000 registros. La idea es que el filtro lo haga para el formulario activo, de esta forma solo filtrara un registro con la información de las tablas relacionas a ese registro.
Yo estaba intentando aplicar un filtro en el ciclo While, pero no me ha funcionado.
El problema del while como indicas que usas es que recorre todo el set de datos y no discriminas ningún elemento, por lo menos deberás de usar un if por algún campo que desees filtrar...

1 respuesta más de otro experto

Respuesta
1
Te paso un esquema de trabajo. Con este esquema podes guardar lo que quieras del formulario copiando campo por campo.
Dim strLibro as string
' abro una instancia de Excel
Set xls = CreateObject("Excel.Application")
' con ella abro el libro ExportaraExcel
strLibro = CurrentProject.Path & "\PadronMasculino.xls"
xls.Workbooks.Open (strLibro)
' lo hago visible o no
xls.Visible = False ' o false
' activo la Hoja 2 en mi caso la hoja se llama "Masc 1"
xls.Worksheets("Masc 1").Activate
'Supongo que los campos a grabar son Campo1 y Campo2
'Copio Campo1 a la celda de la fila1 y columna1 (fila1 y columna2 son vaiables que tienen el número de fila y columna respectivamente
xls.ActiveSheet.Cells(fila1, columna1) = Campo1
'Copio Campo2 a la celda C2 (fila=2, columna C)
xls.ActiveSheet.Cells(2, 3) = Campo2
y así copio dato por dato en la celda que quiero y en la hoja que quiero
para terminar
' guardo los datos
xls.ActiveWorkbook.Save
' cierro excel
xls.Application.Quit
Set xls = Nothing
Siempre repetí los pasos:
1)
Abro una instancia de Excel
Con ella abro el libro
Lo hago visible o no
2) Seleccionar la hoja de Excel
3) Por cada campo asignás el dato a la celda
Los pasos 2 y 3 tantas veces como quieras para distintas hojas
4) Para terminar
Guardar los datos y cerrar excel
Si lo necesitás te puedo ir acompañando paso a paso en la construcción de tu solución.
La que dí no es la única forma. Explicaste muy bien la parte de Access pero no dijiste cómo querías los datos en excel.
Por ejemplo es posible mandar una tabla o una consulta enteritas a excel. De otro modo. Avisame si te interesa.
Hola marciana, Gracias por tu pronta respuesta.
Primero quiere decirte que soy muy principainte en esto, ahora me perece bien tu esquema de trabajo, pero creo que necesito un poco más de ayuda.
En cuanto a lo que preguntas de la forma que quiero que aparezcan los datos en excel es más o menos así: como bien sabes tengo 3 tablas, tabla1 con tabla2 y tabla1 con tabla3, la tabla1 contiene los datos de un proyecto, la tabla2 tiene los datos de inversión y la tabla3 tiene los datos de equipos a utilizar. Necesito que en una planilla excel me exporte para un solo proyecto (el proyecto activo en access) en la parte superior la inversión y más abajo en la misma hoja los equipos a utilizar, es decir, como un resumen del proyecto. Ahora com la base de datos la usan varios usuarios necesito que cree un libro nuevo para que el usuario la pueda guardar en forma local.
Del código que te mostré al principio, estaba intentando crear un ciclo que me filtre de acuerdo al id del proyecto, pero no he podido hacer que funcones bien.
Si quiere te puedo enviar la base que tengo para que veas lo que intento hacer.
De antemano muchas gracias por vuestro tiempo y tu ayuda.
Mandame la base zipeada o RAReada a [email protected]
Si podes mandame una planilla Excel con el diseño correspondiente.
Te aviso que estoy en tiempo de vacaciones así que tardo un poco más en contestar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas