Unir tablas access de distintas bd y exportar a excel

Hola, te molesto para saber si me podrías ayudar con un problema que tengo y no sé como resolver. La cuestión es así: el sistema lo utilizo para hacer carga de datos remotos, hay varias máquinas dedicadas a cargar. Cada una de estas envía un archivo con tablas vinculadas a la bd principal. Las bases que se envían con la información tienen 3 tablas: "Profesionales", "Lugar_atencion" y "beneficiarios". Mi idea sería que de todas las bases que lleguen (serán unas 5 o 6) pueda conformar una sola base con las mismas tres tablas.
La siguiente búsqueda, sería poder exportar el contenido de esas 3 tablas a una planilla excel. Mediante consulta, unifico las tablas, lo que me falta es saber como poder exportar mediante un botón esa consulta a una planilla excel. Lo que hice pero no me funcionó fue hacer una macro con acción transferirHojadeCalculo, pero no pude hacer que se exportara a una planilla excel.
Espero haber sido claro, agradezco desde ya tu tiempo.
Saludos!

1 Respuesta

Respuesta
1
Para crear una sola bd con tres tablas, puedes realizar consultas de inserción de cada tabla, siempre y cuando no tengan campos clave duplicado.
Si no tienes campos clave, ni ninguno que sea sin duplicados, también puede hacerlo de la manera menos ortodoxa, pero más eficaz, Creas las tablas en blanco, y copias y pegas los datos de las demás tablas.
Con respecto a la exportación a excel, te paso el código vba que tendrías que introducir dentro del procedimiento evento del botón: simplemente cambia la instrucción "cadSQL" por la sentencia SQL que quieras. Si no te llevas bien con sql, crea la consulta en access como se hace normalmente, y en el menu "VER", selecciona "Vista SQL" copias el código que hay hay quitando los saltos de linea y tienes la sentencia SQL que deberías copiar.
Para ejecutar el código que te adjunto debes agregar la referencia:"Microsoft Excel 11.0 Object Library", esto se agrega desde el editor de visual Basic (Alt + F11), en el menu herramientas --> referencias.
Una vez agregado la referencia, solo queda pegar el código en el evento del botón: La parte en negrita que esta entre las comillas es la que debes cambiar.
'#### Inicio Codigo ####
cadSQL = "SELECT Cursos.Id_Curso, Cursos.Nombre_Curso FROM Cursos;"
Dim appExcel As Object 'Excel.Application
Dim hoja As Object
Dim con As Connection
Dim rst As Recordset 'DAO.Recordset
Dim fld As Object 'DAO.Field
Dim i As Integer
Dim nom As String
Dim fila As Integer, columna As Integer
Set appExcel = CreateObject("Excel.Application")
'Set con = Application.CurrentProject.Connection
' abrimos excel y añadimos un libro nuevo
appExcel.Visible = True
appExcel.Workbooks.Add
appExcel.Application.WindowState = xlMaximized
' añadimos una hoja nueva por cada consulta que se
' haya pasado como parámetro
Set hoja = appExcel.Sheets(1)
Set hoja2 = appExcel.Sheets(2)
Set hoja3 = appExcel.Sheets(3)
hoja3.Delete
hoja.Name = "Datos"
hoja2.Name = "Grafico"
nom = cadSQL
' si el nombre de la consulta es >31 caracteres
' dará error así que lo recortamos
If Len(nom) > 31 Then
nom = Left(nom, 31)
End If
Set rst = CurrentDb.OpenRecordset(cadSQL)
hoja.Select
fila = 1
columna = 1
For Each fld In rst.Fields
hoja.Cells(1, columna) = fld.Name
 ' -- AutoAjustar las columnas
hoja.Cells(1, columna).Font.Bold = True
hoja.Cells(1, columna).Font.Color = vbWhite
hoja.Cells(1, columna).Interior.ColorIndex = 10
hoja.Cells(1, columna).HorizontalAlignment = xlHAlignCenter
hoja.Cells(1, columna).Columns.EntireColumn.AutoFit
columna = columna + 1
Next
' después traspasamos el valor de los campos
' a las celdas de la hoja de excel
fila = 2
columna = 1
Dim Color As String
Color = "3"
While Not rst.EOF
For Each fld In rst.Fields
If columna = 1 Then
hoja.Cells(fila, columna) = fld.Value
hoja.Cells(fila, columna).HorizontalAlignment = xlHAlignLeft
hoja.Cells(fila, columna).Columns.EntireColumn.AutoFit
hoja.Cells(fila, columna).Font.Italic = True
columna = columna + 1
Else
        hoja.Cells(fila, columna) = fld.Value
        hoja.Cells(fila, columna).HorizontalAlignment = xlHAlignCenter
        hoja.Cells(fila, columna).Columns.EntireColumn.AutoFit
        columna = columna + 1
End If
Next
    vl_col = hoja.Cells(fila - 1, 1)
    columna = 1
    fila = fila + 1
Rst. MoveNext
Wend
Rst. Close
'#### Fin Codigo ####

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas