Importar y Actualizar libro de excel en access |
Responder |
Autor | |
maxpro
Colaborador Unido: 04/Marzo/2006 Localización: Argentina Estado: Sin conexión Puntos: 1556 |
Opciones de entrada
Gracias(0)
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 |
|
maxpro
Colaborador Unido: 04/Marzo/2006 Localización: Argentina Estado: Sin conexión Puntos: 1556 |
Opciones de entrada
Gracias(0)
|
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 |
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |