Saltar al contenido

Macro para Exportar de Excel a Access


Recommended Posts

publicado

buenas tardes, escribo con la finalidad de solicitar apoyo en cuanto a mover datos de un excel a una tabla en Access.

mi archivo de excel tiene los campos a exportar en los campos A2:AN8000  y los campos o nombres de columna estan en A1:AN1, en la hoja llamada Empleados

requiero moverla a un Access llamado Datos.mdb el cual al abrir se debe colocar la clave "rrhh" en minúsculas, 

requiero que al pasar de excel al access sobrescriba lo que exista en el access tipo actualización de datos, que primero vacié la tabla Empleados del access y luego pegue los datos del Excel en Access.

 

espero me puedan colaborar.

dejo muestra de la base de Excel y del Access al abrir se debe colocar la clave "rrhh" en minúsculas

 

https://mega.nz/#!AhcUxI5Y!zNt63rw9ExgyRTegkIpua9VRQHqHK9503cSw1-GIGfE

publicado

Hola

No es lo mismo actualizar que vaciar. Si tu intención es que la macro elimine todos los datos de la tabla "Empleado" y luego guarde en dicha  lo del Excel, pues es otra cosa. De ser eso, particularmente a mí me parece poco práctico pero, ya que tengo algo similar mira:

Sub Exportar()

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql As String
Dim UltimaFila As Long, x As Long

Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & ThisWorkbook.Path & "\Datos.mdb;" & _
        "Jet OLEDB:Database Password=rrhh;"
        
sql = "Delete * From Empleados"

With rst
    .CursorLocation = adUseClient
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open sql, cnn, , , adCmdText
End With

Set rst = Nothing

UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row

For x = 2 To UltimaFila

    
    Set rst = New ADODB.Recordset
    Let sql = "Insert Into Empleados..."

    With rst
        .CursorLocation = adUseClient
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Open sql, cnn, , , adCmdText
    End With

    Set rst = Nothing

Next x

cnn.Close
Set cnn = Nothing

End Sub

Para completar la cadena sql del "Insert Into", sugiero ver un ejemplo aquí:

https://abrahamexcel.blogspot.com/2019/04/excel-y-mysql-2.html

Saludos

Abraham Valencia

PD: OJO con mi proveedor, es 12, pero por tu *.xls y *.mdb me queda duda de que versión de Excel usas. También podría ocurrir que usas esas versiones por cuestión de compatibilidad, claro (no creo que sea porque es teóricamente más fácil trabajar con ese tipo de archivos, lo que no es real y es solo una creencia)

 

publicado
Hace 9 horas, avalencia dijo:

Hola

No es lo mismo actualizar que vaciar. Si tu intención es que la macro elimine todos los datos de la tabla "Empleado" y luego guarde en dicha  lo del Excel, pues es otra cosa. De ser eso, particularmente a mí me parece poco práctico pero, ya que tengo algo similar mira:


Sub Exportar()

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql As String
Dim UltimaFila As Long, x As Long

Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & ThisWorkbook.Path & "\Datos.mdb;" & _
        "Jet OLEDB:Database Password=rrhh;"
        
sql = "Delete * From Empleados"

With rst
    .CursorLocation = adUseClient
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open sql, cnn, , , adCmdText
End With

Set rst = Nothing

UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row

For x = 2 To UltimaFila

    
    Set rst = New ADODB.Recordset
    Let sql = "Insert Into Empleados..."

    With rst
        .CursorLocation = adUseClient
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Open sql, cnn, , , adCmdText
    End With

    Set rst = Nothing

Next x

cnn.Close
Set cnn = Nothing

End Sub

Para completar la cadena sql del "Insert Into", sugiero ver un ejemplo aquí:

https://abrahamexcel.blogspot.com/2019/04/excel-y-mysql-2.html

Saludos

Abraham Valencia

PD: OJO con mi proveedor, es 12, pero por tu *.xls y *.mdb me queda duda de que versión de Excel usas. También podría ocurrir que usas esas versiones por cuestión de compatibilidad, claro (no creo que sea porque es teóricamente más fácil trabajar con ese tipo de archivos, lo que no es real y es solo una creencia)

 

yo uso oficce 2010  que es 14 creo, y uso esas versiones xq no todos los que usaran la base tienen el mismo oficce, y en cuanto a lo de ser poco practico, es que si le doy actualizar los datos siempre estan variando en diferentes columnas y prefiero evitar estos inconvenientes.

en el link que me envías, indica que la cadena sql debe hacerse dependiendo el formato de cada columna? es que no entiendo muy bien soy relativamente nuevo en esto de vba..

publicado

Me refería a la propiedad "Povider" de la conexión, pero ya que mencionas la versión de Office que usas, creo que con Office 2010 ya era 12, de no resultar usa esta:

"Provider=Microsoft.Jet.OLEDB.4.0;" 

Sobre el enlace enviado, lo que debes ver bien es cómo se usa el "Insert Into", no te preocupes por el formato, en el ejemplo estoy trabajando con MySQL, tú céntrate en lo demás (lee otras web sobre Insert Into).

Abraham Valencia

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.