** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Importar y Actualizar libro de excel en access
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Importar y Actualizar libro de excel en access

 Responder Responder
Autor
Mensaje
maxpro Ver desplegable
Colaborador
Colaborador


Unido: 04/Marzo/2006
Localización: Argentina
Estado: Sin conexión
Puntos: 1556
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita maxpro Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Importar y Actualizar libro de excel en access
    Enviado: 05/Mayo/2023 a las 16:32
Hola Amigos, tengo un programa en access que permanentemente esta recibiendo planillas de excel de los proveedores, para ello he generado un código de "importación" que funciona muy bien, a veces esas planillas son de un proveedor especifico que reenvía la misma planilla y le agrega algún producto nuevo y le cambia los precios tanto en pesos como dolares, al igual que los descuentos, etc. para ello cree un código de actualización que si bien funciona tarda mas de 2 horas en hacerlo y a veces se bloquea y cierra access. la idea es simplificarlo, le paso el codigo a ver si tienen la amabilidad de echarme una mano, aqui va el código: Vale aclarar que el Update funciona pero solo sobre Productos que ya estan, hace modificaciones pero si hay productos nuevos ni se entera.

Private Sub btnActualizarExcel_Click()

    Dim rutaExcel As String
    Dim nombreHoja As String
    Dim tablaTemp As String
    Dim tablaPrincipal As String
    
    rutaExcel = "C:\Taller y Repuestos\Taller\Libro1.xlsx" 'cambiar la ruta y nombre del archivo Excel
    nombreHoja = "Hoja1" 'cambiar el nombre de la hoja de Excel
    tablaTemp = "tbProductosTemp" 'nombre de la tabla temporal
    tablaPrincipal = "tbProductos" 'nombre de la tabla principal

       
    'Importar datos nuevos de Excel a tabla temporal
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, tablaTemp, rutaExcel, True, nombreHoja & "$"
    CurrentDb.Execute "INSERT INTO tbProductos(Id, CodInterno, Producto, Marca, Rubro, Precio_Nacional, Precio_Dólar, Cotizacion, iva, porc_ganancia, p_costo_pesos, [P_costo_dólar], Descuento, Precio, List, Fecha) SELECT Id, CodInterno, Producto, Marca, Rubro, Precio_Nacional, Precio_Dólar, Cotizacion, iva, porc_ganancia, p_costo_pesos, [P_costo_dólar], Descuento, Precio, List, Fecha FROM tbProductosTemp WHERE NOT EXISTS (SELECT * FROM tbProductos WHERE tbProductosTemp.Id = tbProductos.Id)"
    Debug.Print "Datos nuevos importados correctamente."
    'Actualizar registros existentes en tabla principal con los precios nuevos importados

CurrentDb.Execute "UPDATE [tbProductos] INNER JOIN [tbProductosTemp] ON [tbProductos].Id = [tbProductosTemp].Id " & _
    "SET [tbProductos].CodInterno = [tbProductosTemp].CodInterno, " & _
    "    [tbProductos].Producto = [tbProductosTemp].Producto, " & _
    "    [tbProductos].Marca = IIf(Len([tbProductosTemp].Marca) > 0, [tbProductosTemp].Marca, Null), " & _
    "    [tbProductos].Rubro = IIf(Len([tbProductosTemp].Rubro) > 0, [tbProductosTemp].Rubro, Null), " & _
    "    [tbProductos].Precio_Nacional = IIf(Len([tbProductosTemp].Precio_Nacional) > 0, [tbProductosTemp].Precio_Nacional, Null), " & _
    "    [tbProductos].Precio_Dólar = IIf(Len([tbProductosTemp].Precio_Dólar) > 0, [tbProductosTemp].Precio_Dólar, Null), " & _
    "    [tbProductos].Cotizacion = IIf(Len([tbProductosTemp].Cotizacion) > 0, [tbProductosTemp].Cotizacion, Null), " & _
    "    [tbProductos].iva = IIf(Len([tbProductosTemp].iva) > 0, [tbProductosTemp].iva, Null), " & _
    "    [tbProductos].porc_ganancia = IIf(Len([tbProductosTemp].porc_ganancia) > 0, [tbProductosTemp].porc_ganancia, Null), " & _
    "    [tbProductos].p_costo_pesos = IIf(Len([tbProductosTemp].p_costo_pesos) > 0, [tbProductosTemp].p_costo_pesos, Null), " & _
    "    [tbProductos].P_costo_dólar = IIf(Len([tbProductosTemp].P_costo_dólar) > 0, [tbProductosTemp].P_costo_dólar, Null), " & _
    "    [tbProductos].Descuento = IIf(Len([tbProductosTemp].Descuento) > 0, [tbProductosTemp].Descuento, Null), " & _
    "    [tbProductos].Precio = IIf(Len([tbProductosTemp].Precio) > 0, [tbProductosTemp].Precio, Null), " & _
    "    [tbProductos].List = IIf(Len([tbProductosTemp].List) > 0, [tbProductosTemp].List, Null), " & _
    "    [tbProductos].Fecha = IIf(Len([tbProductosTemp].Fecha) > 0, [tbProductosTemp].Fecha, Null); "
    
Debug.Print "Datos nuevos insertados en tabla principal correctamente."

    
    'Vaciar tabla temporal
    CurrentDb.Execute "DELETE FROM " & tablaTemp & ";"
    
    MsgBox "La Actualizacion se ha completado correctamente.", vbInformation, "Importar datos"
End Sub


Editado por maxpro - 05/Mayo/2023 a las 16:33
-------Maxpro-------

San Luis - Argentina
Arriba
maxpro Ver desplegable
Colaborador
Colaborador


Unido: 04/Marzo/2006
Localización: Argentina
Estado: Sin conexión
Puntos: 1556
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita maxpro Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Mayo/2023 a las 17:39
Le agregue el siguiente codigo antes de vaciar la tabla Temporal pero me borra toda la tabla "tbProductos"

  'Vaciar tabla temporal
      CurrentDb.Execute "DELETE FROM tbProductos WHERE Id NOT IN (SELECT Id FROM tbProductosTemp)"   
     CurrentDb.Execute "DELETE FROM " & tablaTemp & ";"

Saludos
-------Maxpro-------

San Luis - Argentina
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable