Saltar al contenido

Exportar datos excel a access


xveganx

Recommended Posts

publicado

Buenos días, acudo a los mas sabios en Macros porque he buscado información por muchos lados  y la verdad siempre encuentro cosas diferente y me esta costando escoger el camino correcto y quería saber si es que ustedes pueden tirarme un destello de luz en esta incertidumbre. 

Quiero exportardatos de una hoja de excel a una tabla de access ya creada en una base de datos. 
La tabla tiene la misma cantidad de campos, que columnas el archivo excel, cada uno con el mismo nombre. 

CONTRATO    CONTRATO SAP    FECHA    PROVEEDOR    SUCURSAL    DESCRIPCION    MONEDA

El archivo es una lista de proveedores y sus contratos correspondientes, y datos sobre los mismos. 
La idea es bajar del sistema la informacion y exportarla mediante una macro sin la necesidad de realizar ese traspaso de datos de manera manual y que cada vez que la exporte la informacion vieja se borre y quede la nueva. 

Pero en cada ejemplo que he visto o he bajado y tratado de adaptar a la situacion surge algo y mi falta de conocimientos en codigo VBA me estanca y queria saber si alguien tiene o posee algun archivo que funcione bajo estas condiciones o algun tutorial que me permita aplicar lo que quiero. 

Desde ya muchisimas gracias. 

publicado

Hola @xveganx, para tener un mayor entendimiento sobre las consultas siempre se solicita un archivo de ejemplo, en tu caso la tabla de access y el excel, con datos ficticios es suficiente ya que lo se requiere es ver la estructura de tus archivos.

Te dejo un pequeño código que hace lo que quieres, siempre y cuando lo sepas adaptar a tu archivo.

Sub Exp_ACCESS()

  Set cn = CreateObject("ADODB.Connection")
  
  dbPath = "C:\Users\Usuario\Documents\Database1.accdb" '>>> RUTA de la BD
  
  Tabla = "Tabla1" ' >>> Nombre de la tabla de Access
  
  dbWb = Application.ActiveWorkbook.FullName
  dbWs = Application.ActiveSheet.Name
  scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
  dsh = "[" & Application.ActiveSheet.Name & "$]"
  cn.Open scn
  
  ssql = "Delete * From " & Tabla
  
  cn.Execute ssql
  
  ssql = "INSERT INTO " & Tabla & " ([CONTRATO], [CONTRATO SAP], [FECHA], [PROVEEDOR], [SUCURSAL], [DESCRIPCION], [MONEDA]) "
  ssql = ssql & "SELECT [CONTRATO], [CONTRATO SAP], [FECHA], [PROVEEDOR], [SUCURSAL], [DESCRIPCION], [MONEDA]" & _
  " FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh

  cn.Execute ssql
  
  MsgBox "Listo !!", vbInformation

End Sub

Saludos.

publicado

Antes que nada, muchas gracias por tu respuesta Alexander. 

No habia agregado los archivos porque la base de datos es muy grande  (pesa cerca de 2 gb ya que no solo tiene la tabla de informacion sobre los contratos si no que varios datos mas. lo que hice fue copiar la tabla en una base nueva y segmente el archivo excel  los cuales adjunto. 

Utilice el código que me dijiste, y le agregue las columnas que faltaban a la descripción. 

Cita

Sub Actualizar_Cttos()

  Set cn = CreateObject("ADODB.Connection")
  
  dbPath = "C:/Ubicacion en red/Seguimiento.mdb"
  
  Tabla = "Cttos" '
  
  dbWb = Application.ActiveWorkbook.FullName
  dbWs = Application.ActiveSheet.Name
  scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
  dsh = "[" & Application.ActiveSheet.Name & "$]"
  cn.Open scn
  
  ssql = "Delete * From " & Tabla
  
  cn.Execute ssql
  
  ssql = "INSERT INTO " & Tabla & " ([CONTRATO], [CONTRATO SAP], [FECHA], [PROVEEDOR], [SUCURSAL], [DESCRIPCION], [MONEDA], [IMPORTE], [MONTO DISPONIBLE], [TC], [IMPORTE ACRODADO PES], [MONTO DISPONIBLE PES], [VIGENCIA DESDE], [VIGENCIA HASTA], [AUXILIAR], [GESTOR], [ESTADO APROBACION], [CUADRANTE], [TIPO CONTRATO], [SECTOR], [CONTROL], [ACTIVOS], [SPOT/ON CALL], [INDIRECTOS], [TERCEROS], [REEMPLAZOS], [COPIA_DW], [CLASE], [COMPRADOR]) "
  ssql = ssql & "SELECT [CONTRATO], [CONTRATO SAP], [FECHA], [PROVEEDOR], [SUCURSAL], [DESCRIPCION], [MONEDA], [IMPORTE], [MONTO DISPONIBLE], [TC], [IMPORTE ACRODADO PES], [MONTO DISPONIBLE PES], [VIGENCIA DESDE], [VIGENCIA HASTA], [AUXILIAR], [GESTOR], [ESTADO APROBACION], [CUADRANTE], [TIPO CONTRATO], [SECTOR], [CONTROL], [ACTIVOS], [SPOT/ON CALL], [INDIRECTOS], [TERCEROS], [REEMPLAZOS], [COPIA_DW], [CLASE], [COMPRADOR]" & _
  " FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh

  cn.Execute ssql
  
  MsgBox "Listo !!", vbInformation

End Sub

Al ejecutar la macro me arroja el siguiente error:

Cita


Se ha producido el error '-2147217904 (80040e10)' en tiempo de ejecucion
No se han especificado valores para algunos de los parametros requeridos

 

Al darle depurar, me subraya la siguiente linea:

cn.Execute ssql

Cita

Intente cargar los archivos al foro pero solo permite hasta 102kb asi que adjunto los archivos desde google Drive. 

https://drive.google.com/open?id=1yqqTNLUYbuckHpOXfQj7bP1extMvT1zn

 

publicado
Hace 1 hora, xveganx dijo:

Se ha producido el error '-2147217904 (80040e10)' en tiempo de ejecucion
No se han especificado valores para algunos de los parametros requeridos

Este error se da cuando en la tabla de access hay columnas que no existen o tienen un nombre distinto en la hoja de excel, debes revisar que todos los campos están dentro de los 2 archivos y que se llamen igual tomando en cuenta mayúsculas y minúsculas.

Hace 1 hora, xveganx dijo:

Intente cargar los archivos al foro pero solo permite hasta 102kb asi que adjunto los archivos desde google Drive. 

https://drive.google.com/open?id=1yqqTNLUYbuckHpOXfQj7bP1extMvT1zn

Los archivos que compartiste, el libro de excel no tienen ninguna hoja relacionada a la tabla de access, no se si fue un error al subir el archivo o no te entendí algo.

Te tejo el ejemplo de como debería funcionar el código que te compartí, debes ejecutar la macro "Actualiza_Cttos" en la hoja "Datos a Exportar"

Saludos.

Prueba cttos.zip

publicado

Muchas gracias Alexander por tomarte este tiempo para mi problema. 

Ejecute los archivos que me pasaste sin problemas... pero al querer cambiar la ruta de la DB (el archivo excel se encuentra en una carpeta diferente a la base de datos.. esta ultima se encuetra en una ubicacion en una red compartida) me vuelve a saltar un error. 

En la macro de la hoj original (la tuya) cambie y puse la ruta de la base de datos en la red y me sale error nuevamente y al poner el depurador señala   cn.Open scn

 

Mi consulta es, esta macro no sirve si los archivos no comparten la misma carpeta? 

 

publicado
Hace 2 minutos , xveganx dijo:

Muchas gracias Alexander por tomarte este tiempo para mi problema. 

Ejecute los archivos que me pasaste sin problemas... pero al querer cambiar la ruta de la DB (el archivo excel se encuentra en una carpeta diferente a la base de datos.. esta ultima se encuetra en una ubicacion en una red compartida) me vuelve a saltar un error. 

En la macro de la hoj original (la tuya) cambie y puse la ruta de la base de datos en la red y me sale error nuevamente y al poner el depurador señala   cn.Open scn

 

Mi consulta es, esta macro no sirve si los archivos no comparten la misma carpeta? 

 

Debes de estar escribiendo mal la ruta de la BD, no afecta que el archivo este en en la red siempre y cuando tengas permisos para acceder a ella.

Lo que suelo hacer para no equivocarme al escribir la ruta es usar esta opción del explorador de archivos 

image.png.37106c28a8a40a07dc2a65bbbebd4700.png

Saludos.

Archivado

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

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Archivos

  • Estadísticas de descargas

    • Archivos
      189
    • Comentarios
      99
    • Revisiones
      29

  • Crear macros Excel

  • Mensajes

    • Hola, Parece un Kardex aunque al final me he perdido, entendí que necesita sumar las producciones siempre y cuando no pasen un punto del día. Tal vez algún Maestro o usuario avanzado pueda aportar algo con la información que ha compartido, pero en mi caso no comprendí por qué si  el prod1 tuvo una producción de 90 entonces cómo definió restarle ese 78, ¿es por qué tiene un NO en el "cumple"? Y luego termina en -12 porque le restó 24 que tampoco pude deducir cómo se determinaron. Le recomiendo hacer un ejemplo de un solo ITEM que deba ser afectado por las reglas que compartió y con los resultados que serían los correctos esperados.
    • Hola Buenas Noches, Me podrán ayudar a resolver un problema con una planilla que tengo, les comento brevemente. Tengo un archivo que cuenta con 2 hojas, la primera se llama "Movimientos" que básicamente muestra los productos con quiebres que se presentan y la hoja "Producción" que como su nombre lo dice son las producciones de cada producto según fecha de creación. Lo que necesito es lo siguiente: Cada vez que agregue una producción en la hoja "producción", debo ingresar el código creado su cantidad y lote respetivamente, además de la fecha en que se realiza la producción, en caso que sea mayor a las 12:00 se considera PM sino AM. Lo complejo es acá en la otra hoja llamada Movimientos: Esta hoja contiene una columna que se llama "Saldo", que básicamente es la diferencia de lo producido vs el quiebre en esa fecha. Una columna llamada "Cumple", que significa que ese pedido lleva si o no el producto con quiebre. Y una columna "Se preparo", que es si el pedido se preparo o no. Lo complicado viene acá es que si la fecha de la producción que ingrese en la hoja "Produccion", se hace después de la fecha de la hoja movimientos no me debe contar esa producción para efecto de la columna Saldos, si la fecha es igual o menor si se considera y ese saldo que queda disponible se puede ocupar para futuros ingresos de pedidos. Otra conducción es que las producciones siempre se deben asignar al pedido más antiguo de ese código salvo que la fecha de entrega ya haya pasado. La columna "Cumple" es básicamente para poder generar un KPI donde me indique cuales producciones se cumplieron con el plazo y cuales No. Espero me puedan ayudar ya que tengo la siguiente formula pero no sirve ya que me toma las unidades totales y no cumple con la restricción del horario. =SUMAR.SI(Produccion!A:A; $A2; Produccion!C:C) - SUMAR.SI.CONJUNTO($E$2:$E2; $A$2:$A2; A2)) Muchas gracias. Ejemplo..xlsx
    • Hola a ambos, Prueba con: =BYROW(G5:G6;LAMBDA(x;UNIRCADENAS(" - ";1;FILTRAR(E5:E10;B5:B10=x)))) Saludos,
    • Si tienes office 365 puedes usar algo como FILTER ó TEXTJOIN y si no tienes, entonces se puede jugar con las formulas, pero no te recomiendo mucho si son muchos datos, de todas maneras te dejo una fórmula y en vba, ya tu decides cual ocupar, vale Saludos BUSCAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.