Excel - mrproper: "Velocidad" en macros...

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:mrproper:

Publicado por mrproper (127 intervenciones) el 21/12/2007 18:19:57
Ya veo ke se puede simplificar mas y se me ocurren algunas preguntas dada mi limitacion en VBA. Ahora estoy fuera, de viaje, cuando regrese dentro de unos dias ya volveré a preguntar.

Gracias y un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mrproper:

Publicado por febrero59 (32 intervenciones) el 23/12/2007 01:18:11
He probado el tiempo y efectivamente se reduce en un tercio aproximadamente.Bien.
En cualquier caso, lo que me maravilla es la claridad y reducción de instrucciones. Fenomenal.
Gracias por ello, Juan Luis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar