es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Realice una copia y pegue el código, activado por un botón en diferentes ubicaciones, más rápidamente.

Hice un modelo para que nuestros gerentes de proyecto sigan la economía en diferentes proyectos.

Un deseo para el modelo fue tener la opción de agregar filas a la matriz que hice sin perder las fórmulas y sumas parciales dentro del esquema. Al copiar y pegar y editar fórmulas de este sitio, creé botones en toda la matriz para agregar filas.

Es lento. Cada vez que presionan uno de mis botones, se tarda aproximadamente 44 segundos en agregar una nueva fila y copiar y pegar las fórmulas, etc. en la nueva fila.

Parece que todos los pasos de copiar y pegar son el problema.

¿Puedo hacer que este código de copiar y pegar sea más rápido?

Intenté copiar el rango, pero no puedo hacer que funcione, ni copiar toda la fila (también pega el botón, lo cual no quiero).

Sub Tilføj_række()

Dim b As Object, cs As Integer
Set b = ActiveSheet.Shapes(Application.Caller)
With b.TopLeftCell.EntireRow.Offset(1, 0)
    .Insert
    .Cells(1, 3).Copy .Cells(0, 3)
    .Cells(1, 4).Copy .Cells(0, 4)
    .Cells(1, 5).Copy .Cells(0, 5)
    .Cells(1, 6).Copy .Cells(0, 6)
    .Cells(1, 7).Copy .Cells(0, 7)
    .Cells(1, 8).Copy .Cells(0, 8)
    .Cells(1, 9).Copy .Cells(0, 9)
    .Cells(1, 10).Copy .Cells(0, 10)
    .Cells(1, 11).Copy .Cells(0, 11)
    .Cells(1, 12).Copy .Cells(0, 12)
    .Cells(1, 13).Copy .Cells(0, 13)
    .Cells(1, 14).Copy .Cells(0, 14)
    .Cells(1, 15).Copy .Cells(0, 15)
    .Cells(1, 16).Copy .Cells(0, 16)
    .Cells(1, 17).Copy .Cells(0, 17)
    .Cells(1, 18).Copy .Cells(0, 18)
    .Cells(1, 19).Copy .Cells(0, 19)
    .Cells(1, 20).Copy .Cells(0, 20)
    .Cells(1, 21).Copy .Cells(0, 21)
    .Cells(1, 22).Copy .Cells(0, 22)
End With
End Sub

Una parte de mi matriz se ve así, donde los botones verdes son los activadores del código.

Matriz

Las filas en negrita contienen funciones de suma.

Espero que ustedes genios me puedan ayudar una vez más.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Optimizando el código de copiar y pegar en VBA

    El código VBA proporcionado tarda alrededor de 44 segundos en ejecutarse, lo que lo hace ineficiente. Para optimizar el código de copiar y pegar, existen dos posibles soluciones:

    1. Copiar un rango en lugar de celdas individuales

    Copiar un rango en lugar de celdas individuales puede ahorrar tiempo y acelerar el proceso. El siguiente código reemplaza la función de copiar y pegar con la función Copy, que utiliza un rango de origen para copiar los valores en el rango de destino:

    Sub Tilføj_række()
        Dim b As Object, cs As Integer
        Set b = ActiveSheet.Shapes(Application.Caller)
        Dim lastRow As Long
        Dim target As Range, source As Range
    
        With b.TopLeftCell.EntireRow.Offset(1, 0)
            .Insert
            lastRow = .Row - 1
    
            Set source = Range(Cells(lastRow, 3), Cells(lastRow, 22))
            Set target = Range(Cells(lastRow + 1, 3), Cells(lastRow + 1, 22))
            source.Copy target
        End With
    End Sub
    

    2. Evitar copiar la fila con los botones

    Copiar toda la fila también copia el botón, lo que puede llevar a ineficiencias. Una posible solución es copiar solo las celdas necesarias en lugar de copiar toda la fila. El siguiente código cambia el rango para copiar solo las celdas C22:V22 y pegarlas en la nueva fila:

    Sub Tilføj_række()
        Dim b As Object, cs As Integer
        Set b = ActiveSheet.Shapes(Application.Caller)
        Dim lastRow As Long
        Dim target As Range, source As Range
    
        With b.TopLeftCell.EntireRow.Offset(1, 0)
            .Insert
            lastRow = .Row - 1
    
            Set source = Range("C" & lastRow & ":V" & lastRow)
            Set target = Range("C" & lastRow + 1 & ":V" & lastRow + 1)
            source.Copy target
        End With
    End Sub
    

    Estas soluciones optimizadas pueden reducir significativamente el tiempo necesario para copiar y pegar fórmulas y subtotales al agregar nuevas filas.

Comments are closed.