Imprimir página | Cerrar ventana

Importar y Actualizar libro de excel en access

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86675
Fecha de impresión: 27/Marzo/2026 a las 06:03


Tema: Importar y Actualizar libro de excel en access
Publicado por: maxpro
Asunto: Importar y Actualizar libro de excel en access
Fecha de publicación: 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


-------------
-------Maxpro-------

San Luis - Argentina



Respuestas:
Publicado por: maxpro
Fecha de publicación: 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



Imprimir página | Cerrar ventana