Registrar más rápido con formulario vba

Cuento con el siguiente código, sin embargo demora al registrar los datos en la tabla, tener en cuenta que llevo 6000 registros

Private Sub ButtonGuardar_Venta_Click()
    Set Productos = Sheets("Productos")
    Set Proveedor = Sheets("Proveedor")
    Set Salidas = Sheets("Salidas")
    Set Calculos = Sheets("Calculos")
    Application.ScreenUpdating = False
    On Error Resume Next
    If Me.TextFecha_Venta = Empty Or Me.ComboCliente_Venta = Empty Or Me.TextDocumento_Venta = Empty Then
         MsgBox "Se encontraron campos vacíos, complete los campos vacíos para continuar", vbCritical, "Campos Vacíos"
    Else
        X = MsgBox("¿Desea Guardar los Cambios?", vbYesNo, "Ingresar")
        If X = vbYes Then
         Salidas.Unprotect "cinventarios"
         'Eliminamos si hay documento existente
         '----------------------------------------------------------------
         If Calculos.Range("D16") > 0 Then
            Salidas.ListObjects("TablaSalidas").AutoFilter.ShowAllData
            Salidas.ListObjects("TablaSalidas").Range.AutoFilter field:=2, Criteria1:="=" & Me.TextDocumento_Venta & "", Operator:=xlAnd
            Salidas.Range("TablaSalidas").SpecialCells(xlCellTypeVisible).EntireRow.Delete
            Salidas.ListObjects("TablaSalidas").AutoFilter.ShowAllData
         End If
          '-------------------------------------------------------------
        Salidas.ListObjects("TablaSalidas").AutoFilter.ShowAllData
         For i = 0 To Me.ListVentas.ListCount - 1
            Calculos.Range("CodProducto_Venta").Value = Me.ListVentas.List(i, 0)
            Salidas.ListObjects("TablaSalidas").ListRows.Add (1)
            Salidas.Range("B10").Value = CDate(Me.TextFecha_Venta)
            Salidas.Range("C10").Value = Me.TextDocumento_Venta
            Salidas.Range("e10").Value = Me.ComboCliente_Venta.Text
            Salidas.Range("f10").Value = Me.ListVentas.List(i, 0)
            Salidas.Range("g10").Value = Calculos.Range("Categoria_Venta")
            Salidas.Range("h10").Value = Me.ListVentas.List(i, 1)
            Salidas.Range("i10").Value = Me.TextComentario_Venta
            Salidas.Range("j10").Value = VBA.CDbl(Me.ListVentas.List(i, 2))
          Next
            MsgBox "Número de documento ingresado " & Me.TextDocumento_Venta, vbInformation, "Ingresado"
            Me.TextCantidad_Venta.Value = Empty
            Me.TextFecha_Venta.Value = Empty
            Me.TextDocumento_Venta.Value = Empty
            Me.ComboCliente_Venta.Value = Empty
            Me.TextComentario_Venta.Value = Empty
            Me.TextCodProducto_Venta.Value = Empty
            Me.ComboProducto_Venta.Value = Empty
            Me.TextExistencia_Venta.Value = Empty
            Me.ListVentas.Clear
            Me.btnImprimir_Venta.Visible = False
            Calculos.Range("D22").Value = Empty
            Me.TextDocumento_Venta.Locked = False
            Calculos.Range("M5:N1000").ClearContents
            Me.TextFecha_Venta.SetFocus
            Salidas.Protect "cinventarios", DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
            AllowFormattingRows:=True, AllowDeletingRows:=True, AllowFiltering:=True
        End If
    End If
    Application.ScreenUpdating = True
End Sub

1 Respuesta

Respuesta
1

¿En qué parte del código se demora más?

¿En la parte donde borras?

¿O en la parte donde agregas los registros?

¿Cuántos registros estás agregando?

¿Es necesario agregar el registro al inicio de la tabla? Eso implica que debes recorrer los 6000 registros hacia abajo cada vez que agregas un registro. Lo ideal es agregar un registro al final de la tabla. De esta manera NO desplazas ningún registro.

Es importante que respondas cada una de las dudas y en ese orden.

En la parte en donde agrego los registros en la tabla es la demora

Es necesario al inicio de la tabla pues lo más reciente va al inicio

Agrega el registro al final y después ordena la tabla por fecha. Revisa si de esa manera es más rápido.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas