Tengo un problemita, necesito una macro para importar una hoja de excel a access 2007. Tengo una hoja con 25 columnas y necesito solo pasar 5 columnas que me interesan a mi base de datos en access, ademas si se puede vincular para que cualquier cambio que se haga en excel me lo registre en access (ya lo intente con el asistente para vincular tablas, lo malo es que no me deja modificar ningún registro desde el mismo access y dice que solo se puede modificar en excel)
1 respuesta
Respuesta de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
Las hojas de cálculo vinculadas como tablas en Access no las puedes modificar desde la base de datos sino que tienes que hacerlo desde su programa (Excel). Respecto a lo de importar sólo unas columnas es un poco más difícil. Puedes hacerlo fácilmente de forma manual (quitar las columnas que sobren mientras importas), pero hacerlo con una macro... Bueno, vamos a ver cómo lo haría yo. En primer lugar vamos a crear una función "importarDatosExcel" en un módulo (luego la llamarás desde tu macro). Crea un módulo nuevo. Necesitaremos las librerías de Excel. Para tenerlas desde el módulo accede al menú "Herramientas - Referencias" y marca "Microsoft Excel 11.0 Object Library" (o la versión que tengas). El código de la función es el que viene a continuación: Function importarDatosExcel(ByVal nomFichXLS As String) Dim miXls As Excel.Application Dim miWb As Excel.Workbook Dim miHoja As Excel.Worksheet Dim i As Integer Dim rs As Recordset ' Abrimos el Excel Set miXls = New Excel.Application ' Abrimos el libro On Error Resume Next Set miWb = miXls.Workbooks.Open(nomFichXLS, False, True) If Err <> 0 Then MsgBox "Error al abrir el libro a importar." & vbCrLf & vbCrLf & Error$ On Error GoTo 0 miXls.Quit Exit Function End If On Error GoTo 0 ' Seleccionamos la hoja Set miHoja = miWb.Sheets("Hoja1") ' Borramos el contenido de la tabla para volver a cargarla DoCmd. RunSQL "delete from miTablaXLS" ' (o como se llame la tabla) ' Y la abrimos para insertar los nuevos datos Set rs = CurrentDb().OpenRecordset("miTablaXLS") ' Leemos del excel e insertamos en access I = 2 ' Saltamos la primera línea que tendrá los títulos Do While miHoja.Cells(i, 1) <> "" rs.AddNew rs.Fields(0) = miHoja.Cells(i, 1) rs.Fields(1) = miHoja.Cells(i, 3) ' Fijate que he saltado la columna 2 rs.Update i = i + 1 Loop ' Cerramos todo rs.Close Set miHoja = Nothing miWb.Close Set miWb = Nothing miXls.Quit Set miXls = Nothing End Function Desde tu macro tendrás que llamar a la función con "ejecutarCódigo" y pasar como parámetro el nombre completo del fichero.