|
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
|