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.
Las filas en negrita contienen funciones de suma.
Espero que ustedes genios me puedan ayudar una vez más.
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: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:Estas soluciones optimizadas pueden reducir significativamente el tiempo necesario para copiar y pegar fórmulas y subtotales al agregar nuevas filas.