Importar datos de access a Excel

Tengo una Base de datos de Acces ya trabajando pero quiero importar la tabla principal a excel pero no por lo metodos de importar o exportar de Acces o excel si no por codigo ya que si utilizo el otro metodo excel se queda conectado a la tabla principal y la deja como solo lectura, lo que me interrumpe otros procesos que se llevan acabo por otros usuarios que usan la misma tabla.

Busco algo como

dim db as database

dim rs as database

set db = "\\matfile\Data\Shared\Databases\ Recuperaciones.accbd"

set rs= db.openrecorset("TBL_Principal")

Y ya con estro trabajar sobre la hoja de excel.

El problema es que nuca he trabajado con codigos en excel y no conosco el ambiente y los comandos que necesito

1

1 Respuesta

205.025 pts. Programador - Administrador

Quizá, ya que trabajarás sobre Excel, lo más práctico sea que desde ahí importes los datos de Access. Yo recomiendo usar ADO:

Option Explicit
Sub DatosdeAccess()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql As String
Dim x As Long, y As Long, i As Long, Registros As Long
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'Realizamos la conexión con la base de datos de Access
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "data source=" & ThisWorkbook.Path & "\Ejemplo.accdb"
.Open
End With
'Todos los registro de la tabla Directorio
sql = "Select * From Directorio"
With rst
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open sql, cnn, , , adCmdText
End With
'Colocamos los encabezados de campos
For i = 0 To rst.Fields.Count - 1
Cells(1, i + 1) = rst.Fields(i).Name
Next
'Nos movemos al primer registro de la consulta
rst.MoveFirst
'Número de registros
Registros = Val(rst.RecordCount)
'Este For envía cada registro a una fila
For y = 1 To Registros
'este For envía cada campo a una columna
For x = 1 To rst.Fields.Count
Cells(y + 1, x) = rst.Fields(x - 1).Value
Next x
'Nos movemos al siguiente registro
rst.MoveNext
Next y
Set cnn = Nothing
Set rst = Nothing
End Sub

No olvides activar la referencia a "Microsoft ActiveX Data Objects2.8 Library" (el 2.8 puede ser otra versión en tu Office)

Comentas

Abraham Valencia

¡Gracias! 

Lo intentare y te confirmo si tengo cualquier duda o problema

Saludos!

Me funciono perfecto y es super rapido y no se queda conectada que es el problema que queria solucionar.

Mil gracias!

Solo una cosa mas.

Veo que agrega la infromacion en la hoja que tengo activa, como puedo redirigila a una Sheet en especifico?

Agrega la hoja en la parte en que se envía los datos a las celdas:

Sheets("Hoja234").Cells(y + 1, x)

Salu2

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas