Por que cuando ejecutas una macro compuesta de varias sub tarda mas de lo debido

09/01/2009 - 23:26 por Anonimo | Informe spam
Un saludo, a todos. Utilizo Excel 2007.

El caso es que en varias ocasiones utilizo una macro formada por varias a la
vez y unas veces, la mayor parte de ellas, la duracion del proceso es
bastante breve, digamos 4 segundos o menos, pero en otras ocasiones, la
misma macro, sobretodo si se ejecuta de forma seguida sin grabar el fichero
y volver a iniciarle, dura mas de un minuto.

Acaso hay algún tipo de memoria que se queda en uso y hay que descargarla?

Las macros mayormente son bucles de 300 filas

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
10/01/2009 - 00:54 | Informe spam
hola, !

El caso es que en varias ocasiones utilizo una macro formada por varias a la vez y unas veces
la mayor parte de ellas, la duracion del proceso es bastante breve, digamos 4 segundos o menos
pero en otras ocasiones, la misma macro, sobretodo si se ejecuta de forma seguida sin grabar el fichero
y volver a iniciarle, dura mas de un minuto.
Acaso hay algun tipo de memoria que se queda en uso y hay que descargarla?
Las macros mayormente son bucles de 300 filas



si poder "ver" que hacen las macros ??? solo se podria sugerir...
- que revises que las variables de tipo objeto asignadas sus referencias con sentencias del tipo Set...
sean "destruidas" al finalizar la macro (sobre todo si la macro es "repetida constantemente")

de seguro podria haber mas (posibles) causas de la disminucion de recursos que comentas, pero... ???

saludos,
hector.
Respuesta Responder a este mensaje
#2 Anonimo
10/01/2009 - 01:07 | Informe spam
Estos son los diferentes sub que utilizo.

El tema es para unos horarios de partidos de futbol sacados de la pagina
http://www.federacioncantabradefutb...index.php, Copio los
resultados de esa pagina, por ejemplo el fin de semana de 17 y 18 de enero,
y los copio tal cual en una hoja excel, a partir de ahi utilizo este codigo,
que me va muy, "aunque seguro es mejorable" para hacerlo.

Gracias como siempre Hector.

Dim matriz(1 To 16) As Variant
Dim nombre As Variant


Sub BORRAR_FILAS()

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row


For rng = ultfila To 1 Step -1

Set celda = cells(rng, 1)

If celda Like "Encuentro" = True Then celda.EntireRow.Delete

Next

End Sub

Sub quitar_datos()

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

Dim rng As Range



For i = ultfila To 1 Step -1

If cells(i, 1) Like "*Reocin*" = True Or cells(i, 1) Like "*Reocín*" = True
Or cells(i, 1) Like "*Jornada*" = True Or IsDate(cells(i, 1)) = True Then

Else: cells(i, 1).EntireRow.Delete

End If

Next


End Sub


Sub septimo_paso()

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

For i = 2 To ultfila - 1

If cells(i + 1, 1).Font.Bold = False Then cells(i, 1).Font.Bold = False

Next


For i = ultfila To 2 Step -1

If cells(i, 1) Like "*Jornada*" = True And cells(i, 1).Font.Bold = True
Then cells(i, 1).EntireRow.Delete
Next i

For i = ultfila To 2 Step -1

If cells(i, 1) Like "*Jornada*" = True Then cells(i, 1).Font.Bold = True
Next i



End Sub

Sub poner_fecha()

fecha = Range("a1").Value

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

Dim rng As Range

For Each rng In Range("a1:a" & ultfila)

If IsDate(rng) = True Then

dia = Weekday(rng.Value)
mes = Month(rng.Value)
ddia = Day(rng.Value)

Select Case dia

Case 1
fecha = "Domingo, "
Case 2
fecha = "Lunes, "
Case 3
fecha = "Martes, "
Case 4
fecha = "Miercoles "
Case 5
fecha = "Jueves, "
Case 6
fecha = "Viernes, "
Case 7
fecha = "Sabado, "
End Select

End If

rng.Offset(0, 2) = fecha & Format(rng.Offset(0, 2), "hh:mm") & ", " &
Format(ddia, "00") & "/" & Format(mes, "00")

Next rng

Range("e1:g1500").Clear
'rng = Nothing

End Sub

Sub eliminar_fecha_extra()

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

For l = ultfila To 2 Step -1

If IsDate(cells(l, 1)) = True And IsDate(cells(l - 1, 1)) = True Then
cells(l, 1).EntireRow.Delete
Next


End Sub


Sub agrandar_fila()

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

For i = 1 To ultfila

cells(i, 1).Rows.RowHeight = 24

Next

End Sub


Sub matrices()




For i = 1 To 16

matriz(i) = Sheets("hoja4").cells(i, 5)

Next

End Sub

Sub ordenar_javi()

Call matrices

x = 2
ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

With Range("e1:g1")
.MergeCells = True
.HorizontalAlignment = xlCenter
.Font.Color = RGB(255, 0, 0)
.Font.Bold = True
.Font.Size = 16
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With

[e1] = [a1] + 1

Range("E1") = Format(Range("e1"), "mm/dd/yy")


For i = 1 To 16

For rw = 1 To ultfila

If cells(rw, 1) Like "*" & matriz(i) & "*" Then



cells(x, 5) = cells(rw, 1)
cells(x, 5).Font.Bold = True
cells(x + 1, 5) = cells(rw + 1, 1)
cells(x + 1, 6) = cells(rw + 1, 2)
cells(x + 1, 7) = cells(rw + 1, 3)
cells(x + 1, 7).HorizontalAlignment = xlRight

Else: End If

Next
x = x + 2
Next


End Sub

Sub borrar()

[e2].Select
ultfila = Columns("e:e").Range("A65536").End(xlUp).Row

For ult = ultfila To 2 Step -1

If IsEmpty(cells(ult, 5)) = True Then

Range(cells(ult, 5), cells(ult, 7)).Select
Selection.Delete shift:=xlShiftUp
Else: End If
Next
End Sub
Sub formato_celdas()

ultfila = Columns("e:e").Range("A65536").End(xlUp).Row

Dim rng As Range

Set rango = Range("E2:g" & ultfila)

For Each rng In rango

If rng.Font.Bold = False And IsEmpty(rng) = False Then

With rng
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Else: End If
Next

End Sub


Sub HACER_CALENDARIOS()

On Error Resume Next

Application.ScreenUpdating = False


If cells(3, 3) Like "*o,*" Then Exit Sub
Range("e1:g300").Clear

Call BORRAR_FILAS
Call quitar_datos
Call septimo_paso
Call poner_fecha
Call eliminar_fecha_extra
Call agrandar_fila
Call ordenar_javi
Call borrar
Call formato_celdas




Range("a1").Select

nombre = Day(Range("a1")) & "-" & Month(Range("A1")) & "-" &
Year(Range("A1"))



ActiveSheet.Name = nombre


Application.ScreenUpdating = True

End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida