mrproper: "Velocidad" en macros...
Publicado por JuanC (792 intervenciones) el 20/12/2007 00:32:16
exclusivo para mrproper...
no voy a mejorarte todo el código, pero te dejo -a vos y a quien le interese- un
ejemplo de cómo puede mejorarse considerablemente una macro
el código está sacado de uno de los tuyos pero hice cambios en cuanto a
las referencias (el proceso es el mismo)
Option Explicit
'//By JuanC - Dic. 2007
'//Ejemplo muy sencillo que muestra
'//la importancia de escribir un buen código...
'//Método lento (original)
'//Basado en la grabadora de macros...
'//lo cual sirve para empezar, pero es de
'//lo más lento para hacer un trabajo...
'//además de lo extenso y complejo que se
'//hace el código...
Sub test1()
Dim t!
t = Timer
Application.Calculation = xlManual
Sheets("Hoja1").Select
Rows("10:10").Select
Selection.Copy
Range("A11").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("11:11").Select
Selection.Copy
Range("A12").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("12:12").Select
Selection.Copy
Range("A13").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("13:13").Select
Selection.Copy
Range("A14").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("14:14").Select
Selection.Copy
Range("A15").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("15:15").Select
Selection.Copy
Range("A16").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("16:16").Select
Selection.Copy
Range("A17").Select
ActiveSheet.Paste
Application.Calculation = xlAutomatic
Application.Calculate
MsgBox Timer - t
End Sub
'//Método rápido (original mejorado)
'//Basado en la grabadora de macros...
'//y leyendo en la Ayuda lo que
'//nos deja la grabadora...
Sub test2()
Dim t!
t = Timer
With Application
.ScreenUpdating = False
.Calculation = xlManual
[Hoja1!10:10].Copy [A11]
[Hoja1!11:11].Copy [A12]
[Hoja1!12:12].Copy [A13]
[Hoja1!13:13].Copy [A14]
[Hoja1!14:14].Copy [A15]
[Hoja1!15:15].Copy [A16]
[Hoja1!16:16].Copy [A17]
.Calculation = xlAutomatic
.Calculate
.ScreenUpdating = True
End With
MsgBox Timer - t
End Sub
'//Saquen sus conclusiones; yo ya saqué las mías!
Saludos desde Baires, JuanC
no voy a mejorarte todo el código, pero te dejo -a vos y a quien le interese- un
ejemplo de cómo puede mejorarse considerablemente una macro
el código está sacado de uno de los tuyos pero hice cambios en cuanto a
las referencias (el proceso es el mismo)
Option Explicit
'//By JuanC - Dic. 2007
'//Ejemplo muy sencillo que muestra
'//la importancia de escribir un buen código...
'//Método lento (original)
'//Basado en la grabadora de macros...
'//lo cual sirve para empezar, pero es de
'//lo más lento para hacer un trabajo...
'//además de lo extenso y complejo que se
'//hace el código...
Sub test1()
Dim t!
t = Timer
Application.Calculation = xlManual
Sheets("Hoja1").Select
Rows("10:10").Select
Selection.Copy
Range("A11").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("11:11").Select
Selection.Copy
Range("A12").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("12:12").Select
Selection.Copy
Range("A13").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("13:13").Select
Selection.Copy
Range("A14").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("14:14").Select
Selection.Copy
Range("A15").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("15:15").Select
Selection.Copy
Range("A16").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
Rows("16:16").Select
Selection.Copy
Range("A17").Select
ActiveSheet.Paste
Application.Calculation = xlAutomatic
Application.Calculate
MsgBox Timer - t
End Sub
'//Método rápido (original mejorado)
'//Basado en la grabadora de macros...
'//y leyendo en la Ayuda lo que
'//nos deja la grabadora...
Sub test2()
Dim t!
t = Timer
With Application
.ScreenUpdating = False
.Calculation = xlManual
[Hoja1!10:10].Copy [A11]
[Hoja1!11:11].Copy [A12]
[Hoja1!12:12].Copy [A13]
[Hoja1!13:13].Copy [A14]
[Hoja1!14:14].Copy [A15]
[Hoja1!15:15].Copy [A16]
[Hoja1!16:16].Copy [A17]
.Calculation = xlAutomatic
.Calculate
.ScreenUpdating = True
End With
MsgBox Timer - t
End Sub
'//Saquen sus conclusiones; yo ya saqué las mías!
Saludos desde Baires, JuanC
Valora esta pregunta


0