Exportar un rango variable de celdas de una hoja en excel a una base de datos en access

Necesito pasar un rango variable de celdas (Numero de columnas fijo, filas variable), a una base datos en access, que me permita acumular y manejar mas datos que en excel.

Los encabezados de las columnas de la hoja excel se corresponde con los nombres de campo de la base de datos.

Los datos deben pegarse a continuación de los datos ya existentes en la base de datos.

1 Respuesta

Respuesta
1

[Hola

No es tan simple, hay que usar ADO (o simimar). Como para que te vayas dando idea, sugiero ver el ejemplo N° 8 de mi blog. Ojo, no es en específico exportar todo un rango, pero sí datos desde Excel hacia Access tal como solicitas.

Abraham Valencia

https://abrahamexcel.blogspot.com/?m=1 

Lima, Perú

Gracias por tu aportación, he visto el ejemplo 8 de tu blog y el pasar datos mediante formulario, no me sirve, ya que se trata de pasar distintos albaranes con hasta 54 lineas a la base de datos, de hay la necesidad de pasar todo el rango que ocupe cada uno de los albaranes.

Un saludo, y de nuevo Gracias

[Hola nuevamente

Como comente antes, la idea era que te vayas dando idea de cómo era usar ADO, que es la forma que tendrás que usar (o una muy similar). Por cierto, yo ahí uso un Userform y sus objetos, pero por si acaso las celdas también son objetos, es cuestión de reemplazar y como son muchas celdas en tu caso, pues usar un bucle tipo For Next para enviar todo. Entre mi baúl de recuerdos tengo uno así que hice el 2006 o 2007, mañana te lo paso, pero como ves, no es tan simple.

Saludos]

Abraham Valencia

https://abrahamexcel.blogspot.com/?m=1 

Lima, Perú

¡Gracias! Por tu/vuestra implicación. Un saludo

[Hola

Este código tiene al menos 15 años pero es más cercano a lo que necesitas que el anterior:

Rem Codigo tomado de:
Rem http://www.erlandsendata.no/english/index.php?d=envbadacexportado
Rem Usado y modificado por Abraham Valencia
Sub exportaraccess()
Dim cn As ADODB.Connection, rs As ADODB.Recordset, n As Long
Dim nfila As String
If [a2] = Empty Then
MsgBox prompt:="No hay datos para exportar", Buttons:=vbOKOnly + vbCritical, Title:="Campos vacios"
Exit Sub
End If
Set cn = New ADODB.Connection
cn.Open "provider=microsoft.jet.oledb.4.0; " & "data source=" & ThisWorkbook.Path & "\Combinar2.mdb;"
Set rs = New ADODB.Recordset
rs.Open "Datos", cn, adOpenKeyset, adLockOptimistic, adCmdTable
n = 2
Do While Range("a" & n) <> Empty
With rs
.AddNew
.Fields("Nombre") = Range("a" & n).Value
.Fields("Sexo") = Range("b" & n).Value
.Fields("Direccion") = Range("c" & n).Value
.Fields("Edad") = Range("d" & n).Value
End With
n = n + 1
Loop
With rs
.AddNew
.Fields("Nombre") = Range("a" & n).Value
.Fields("Sexo") = Range("b" & n).Value
.Fields("Direccion") = Range("c" & n).Value
.Fields("Edad") = Range("d" & n).Value
End With
Set rs = Nothing
cn.Close
Set cn = Nothing
MsgBox prompt:="Los datos fueron enviados correctamente", Buttons:=vbOKOnly, Title:="DATOS EXPORTADOS"
If [a3] = Empty Then
Range("a2", Selection.End(xlToRight)).ClearContents
Exit Sub
End If
nfila = Range("A65535").End(xlUp).Row
Range("a2:d" + nfila).ClearContents
End Sub

La cadena de conexión sí usa la del ejemplo anterior.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas