Excel - velocidad de ejecucion de macros

 
Vista:

velocidad de ejecucion de macros

Publicado por ivan (6 intervenciones) el 13/12/2007 13:03:56
Hola:
¿Qué puede influir para que el tiempo de ejecución de una macro sea cada vez más lento?
Para hacerse una idea, teniendo solo instalado en el ordenador el office y un programa de contabilidad y facturación, cuando ejecuto las macros por primera vez va rápido, pero a la segunda o tercera vez la velocidad se reduce mucho.
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:velocidad de ejecucion de macros

Publicado por JuanC (792 intervenciones) el 13/12/2007 13:32:47
podría deberse a pérdida de recursos (RAM) pero en verdad habría que ver
el código...

Saludos desde Baires, JuanC
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:velocidad de ejecucion de macros

Publicado por Yair Escudero (11 intervenciones) el 13/12/2007 15:24:36
Hola
pienso igual que el compañero, habria que ver el codigo,
pero sin verlo me atreveria a decir que se debe a que los objetos utilizados en las macros luego de ejecutarlos no se estan liberando
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:velocidad de ejecucion de macros

Publicado por ivan (6 intervenciones) el 13/12/2007 16:13:15
El código es el siguiente:

Sub OCULTAR()
Dim SUM
Dim SUM2
Dim i
Dim ContLinies
Dim PosicioSuma
Dim ContFulls
Dim ContFullsTotal
Dim ocultar_ant

ContLinies = 10
ContFulls = 1
Cells(2, 9) = "Pag. " & ContFulls & " /"

For i = 10 To MAX_LINEAS

Select Case Cells(i, 13)

Case "R": ContLinies = ContLinies + 1

Case "T":
If Cells(i, 6) = "" And Cells(i, 9) = 0 Then 'OCULTAR EL TITOL I TOT si preu=0
Rows(i).Select
Selection.EntireRow.Hidden = True
For ii = 0 To 17
Rows(i + ii).Select
Selection.EntireRow.Hidden = True
Next ii
i = i + 17
ocultar_ant = True
Else
ContLinies = ContLinies + 1
ocultar_ant = False
End If
SUM = SUM + Cells(i, 9)

Case "M":
If Cells(i, 4) = "" Then 'OCULTAR LA LINEA DE MATERIAL
Rows(i).Select
Selection.EntireRow.Hidden = True
Else
If Cells(i, 7) = "." Then 'oculto la linea para vista cliente, material en blanco
Rows(i).Select
Selection.EntireRow.Hidden = True
Else
ContLinies = ContLinies + 1
End If
End If

Case "I": Rows(i).Select
Selection.EntireRow.Hidden = True

Case "S": PosicioSuma = i
Cells(i, 6).ClearContents
Rows(i).Select
Selection.EntireRow.Hidden = True
SUM2 = SUM

Case "E": 'Deixem l'espai lliure
If ocultar_ant Then 'ocultem tot i la linia E
Rows(i).Select
Selection.EntireRow.Hidden = True
ContLinies = ContLinies - 2
End If
ContLinies = ContLinies + 1

Case "ER": 'omplir linies en blanc per deixar la suma final al final de la pagina, cont fins a 44
If ContLinies < 44 Then
Rows(i).Select
Selection.EntireRow.Hidden = False
ContLinies = ContLinies + 1
Else
Rows(i).Select
Selection.EntireRow.Hidden = True

End If

Case "H": ContLinies = ContLinies + 1

Case "F": i = MAX_LINEAS

Case Else:
End Select

If ContLinies > 50 Then
For s = 0 To 11
Rows(PosicioSuma - s).Select
Selection.EntireRow.Hidden = False
Next s
Set ActiveSheet.HPageBreaks(ContFulls).Location = Cells(PosicioSuma - 10, 1)
ContFulls = ContFulls + 1
SUM2 = Format(SUM2, "##,##0 €")
Cells(PosicioSuma - 11, 9) = "SUMA PROVISIONAL..... " & SUM2
Cells(PosicioSuma - 10, 9) = "Pág. " & ContFulls & " /"
Cells(PosicioSuma - 8, 2) = Cells(4, 2)
Cells(PosicioSuma - 7, 2) = Cells(5, 2)
Cells(PosicioSuma - 6, 2) = Cells(6, 2)
Cells(PosicioSuma - 5, 2) = Cells(7, 2)
Cells(PosicioSuma - 3, 2) = Cells(9, 2)
Cells(PosicioSuma - 8, 7) = Cells(4, 7)
Cells(PosicioSuma - 3, 7) = Cells(9, 7)
Cells(PosicioSuma - 2, 7) = Cells(10, 7)
Cells(PosicioSuma - 2, 8) = Cells(10, 8)
Cells(PosicioSuma, 9) = "SUMA ANTERIOR............ " & SUM2
ContLinies = i - (PosicioSuma - 10)
End If

ContFullsTotal = ContFulls
Cells(2, 10) = ContFullsTotal

Next i

Columns("C:E").Select
Selection.EntireColumn.Hidden = True
Columns("K:M").Select
Selection.EntireColumn.Hidden = True

Cells(11, 2).Select

End Sub

Para poneros un poco en el sitio, este código pertenece a una hoja para hacer presupuesto en la que se ocultan las filas y columnas que no se utilizan.
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:velocidad de ejecucion de macros

Publicado por JuanC (792 intervenciones) el 13/12/2007 21:11:45
si bien el código no está optimizado no creo que sea el 'responsable directo'
del problema en cuestión
seguramente hay alguna otra cosa que no funciona bien...

PD: falta algo importante y es MAX_LINEAS ?? si son muchas
líneas obviamente el proceso va a ser lento

Saludos desde Baires, JuanC
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:velocidad de ejecucion de macros

Publicado por ivan (6 intervenciones) el 14/12/2007 10:35:48
En el código tengo establecido 600 lineas, pero normalmente ocupo unas 200
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:velocidad de ejecucion de macros

Publicado por JuanC (792 intervenciones) el 14/12/2007 13:10:51
son pocas, tiene que haber algún problema 'externo' al código...
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:velocidad de ejecucion de macros

Publicado por ivan (6 intervenciones) el 02/01/2008 17:04:10
Primero, gracias por todo JuanC.
Segundo, he encontrado el problema. No es de código en principio. El causante es el proceso spoolsv.exe, que al ejecutar la macro, si exel consume el 60 % de CPU aproximadamente, el resto lo consume este proceso.
No se si tu tienes la solución. Yo seguiré buscandola.
Gracias
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