Una macro que ralentiza Excel

Les comento lo siguiente:
Tengo un libro con dos hojas: "A" y "B"
La hoja "01" contiene registros temporales y la "02" funciona como historico donde van acumulandose los de "01"
Consegui una macro -llamesmola Insertar - que adapte a mis necesidades de ir insertando lo de "01" en "02"
Funciona perfectamente. Repito: es un libro donde solo están estas dos hojas y no se realiza ningún tipo de cálculos.
¿Dónde se presento el problema? Cuando inserte esta macro en otro libro -llamesmolo AMP - que tiene varias hojas, una de ellas con 800 registros y muchos calculos otra con una hoja que realiza un solo calculo, pero complejo.
En el libro AMP los calculos -sin la macro "Insertar" - aunque son muchos no ralentizan el Excel, pero al ejecutar la macro "Insertar", me da tiempo para ver una buena tanda de peliculas antes de ver los resultados.
Windows 7 y Excel 2010 en un Intel i3 2350M, es donde todo ocurre
Pego el codigo a ver si le descubren algun error.
----------------------------
Sub Insertar_info()
'ordenar por fecha en hoja 01
Range("A1:G100").Select
ActiveWorkbook.Worksheets("01").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("01").Sort.SortFields.Add Key:=Range("A1:A100"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("01").Sort
.SetRange Range("A1:G100")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'rutina que graba la info en la hoja "02"
'se busca la primera fila libre en hoja 02
filalibre = Sheets("02").Range("A1048576").End(xlUp).Row + 1
'se pasarán la info desde la primera fila de items
Sheets("01").Select Range("A1").Select
fila = 5
While ActiveCell.Value <> ""
'copiar detalle del Asiento
Sheets("02").Cells(filalibre, 1) = ActiveCell.Offset(0, 0)
Sheets("02").Cells(filalibre, 2) = ActiveCell.Offset(0, 1)
Sheets("02").Cells(filalibre, 3) = ActiveCell.Offset(0, 2)
Sheets("02").Cells(filalibre, 4) = ActiveCell.Offset(0, 3)
Sheets("02").Cells(filalibre, 5) = ActiveCell.Offset(0, 4)
Sheets("02").Cells(filalibre, 6) = ActiveCell.Offset(0, 5)
Sheets("02").Cells(filalibre, 7) = ActiveCell.Offset(0, 6)

'incremento la variable fila para repetir el bucle
filalibre = filalibre + 1
'repetir el bucle para los items siguientes
ActiveCell.Offset(1, 0).Select
Wend
End Sub
---------------------------------

2 Respuestas

Respuesta
1

Acá tienes ejemplos de macros que pueden ayudar a tu proyecto

Amigo Ejecuta la macro paso a paso con F8 y fíjate donde se detiene la macro y porque se ralentiza. Para ajustar ese código para ver si existe otra forma de realizarlo más rápido.

Respuesta
2

Prueba con lo siguiente:

Agrega estas líneas al principio de tu macro

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

Agrega estas líneas al final de tu macro:

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic

Prueba y me comentas si mejoró el tiempo de ejecución.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas