macros grabadas son muy lentas

05/01/2006 - 17:10 por ADALBERTO MARTINEZ | Informe spam
grabe una macro en excel 2003 y corre muy rapido. lo que hace la macro es
migrar de un archivo .csv que ejecuta una consulta de discoverer, a una hoja
de excel,

en promedio, cuando la corro tarda 1 o 2 segundos, pero al pasar del tiempo,
(2 semanas) se va haciendo mas lenta hasta llegar a tardar 3 o 4 min,

que puedo hacer para que siempre sea rápida?

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
06/01/2006 - 04:04 | Informe spam
hola, Adalberto !

grabe una macro... y corre muy rapido... migrar de un archivo .csv que ejecuta una consulta de discoverer...
en promedio, cuando la corro tarda 1 o 2 segundos, pero al pasar del tiempo, (2 semanas)
se va haciendo mas lenta hasta llegar a tardar 3 o 4 min,
que puedo hacer para que siempre sea rapida?



sin 'ver' lo que hace la macro [y +/- como y donde va 'depositando' resultados, etc. etc. etc.]... -?-
de entre algunas de la posibles que causas pudieran verse 'involucradas'...
-> que la macro haga un 'barrido' de [todas ?] las celdas/filas de alguna hoja -?-
-> que se 'corran' depuraciones/compilaciones/... en el proyecto de macros -?-
-> que la hoja donde se vacian datos vaya 'creciendo' -?-
-> ??? [hay demasiadas posibilidades aun 'abiertas'] :))

si no puedes/quieres/... 'exponer' el codigo de dicha macro...
comentas algun detalle adicional ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Marianoh
06/01/2006 - 21:50 | Informe spam
Adalberto:

He tenido el mismo problema. Mi archivo es un original que cada día
se guarda como una copia nueva, por lo que no hay cambios en el mismo,
sin embargo con el correr del tiempo la ejecución de algunas macros se
ralentiza sobremanera.
La única solución que he encontrado es eliminar los controles
incrustados en las hojas (yo utilizaba varios CommandButton para
activar las macros). No se por que pero eso solucionó el problema.

Saludos: MarianoH
Respuesta Responder a este mensaje
#3 ADALBERTO MARTINEZ
07/01/2006 - 14:16 | Informe spam
gracias hector

de hecho, el archivo no crece, se va haciendo mas pequeño o en su defecto se
queda del mismo tamaño (filas,lineas y bytes)

no so sobre compilaciones y depuraciones, pero creo que la macro no tiene
esto,
¿te ayudaria que pegara toda la macro completa?
con gusto.


Sub MIGRACION()
'
' Macro7 Macro
' Macro grabada el 19/12/2005 por SSM
'

'
Rows("7:373").Select
Selection.Delete Shift:=xlUp
Windows("Fecha_Requerida.csv").Activate
Columns("K:L").Select
Range("L1").Activate
Selection.Delete Shift:=xlToLeft
Range("A2:K2").Select
Range("K2").Activate
Selection.AutoFilter
Rows("3:344").Select
ActiveWindow.ScrollRow = 1
Selection.AutoFilter Field:, Criteria1:="="
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="224A,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="432,215,432,215,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="213,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="910,225,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="261,226,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="432,432,215,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="432,215,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="461,871,204,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="224,223,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="431,215"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="431,215,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="431,224,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="431,224"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="225,201,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="221,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="225,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="223,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="224,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="215,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="226,461,872,204,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="470,215,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="826,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:, Criteria1:="226,"
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:
Range("A3:K3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Selection.Copy
Windows("LISTA MAESTRA ITR 2005.xls").Activate
Range("C7").Select
ActiveSheet.Paste
Application.CutCopyMode = False
With Selection.Font
.Name = "Arial"
.Size = 7
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.MergeCells = False
End With
Columns("E:E").Select
With Selection
.WrapText = True
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Columns("M:M").Select
With Selection
.WrapText = True
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("N7").Select
ActiveCell.FormulaR1C1 = "=+R3C5-RC[-5]"
Columns("N:N").Select
Selection.Style = "Comma"
Selection.NumberFormat = "_-* #,##0.0_-;-* #,##0.0_-;_-* ""-""??_-;"
Selection.NumberFormat = "_-* #,##0_-;-* #,##0_-;_-* ""-""??_-;"
With Selection.Font
.Name = "Arial"
.Size = 7
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("N7:N283").Select
Selection.FillDown
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
Range("A7").Select
ActiveCell.FormulaR1C1 = "=+R[-3]C[4]"
Range("A7").Select
ActiveCell.FormulaR1C1 = "1"
Range("A8").Select
ActiveCell.FormulaR1C1 = "=+R[-1]C+1"
Range("B7").Select
ActiveCell.FormulaR1C1 = "=+R[-3]C[3]"
Range("B8").Select
ActiveCell.FormulaR1C1 = "=+R[-1]C"
Range("A8:B284").Select
Selection.FillDown
ActiveWindow.ScrollRow = 283
Rows("7:314").Select
Range("A314").Activate
Selection.AutoFilter Field:=4, Criteria1:="="
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:=4
Range("A7:N7").Select
Range(Selection, Selection.End(xlDown)).Select
With Selection.Font
.Name = "Arial"
.Size = 7
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
Range("C7").Select
Workbooks("Fecha_Requerida.CSV").Close SaveChanges:=False
Range("B7").Select

Columns("B:B").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("B7").Select
Application.CutCopyMode = False


Range("K7").Select
ActiveCell.FormulaR1C1 = _

"=IF(RC[-8]=LOOKUP(RC[-8],INTTERCAMBIOS!C[-8]),LOOKUP(RC[-8],INTTERCAMBIOS!C[-8],INTTERCAMBIOS!C[3]),IF(RC[-1]<R3C5,""RETRASADO"",IF(RC[-1]<R3C5+5,""URGENTE"",IF(RC[-7]=LOOKUP(RC[-7],urgentes!C[-9]),""prioridad"",""""))))"
Range("K7:K278").Select
Selection.FillDown
Rows("7:282").Select
Range("A282").Activate
Selection.AutoFilter Field:=3, Criteria1:="="
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:=3
Calculate
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveWindow.ScrollRow = 1
Range("A7").Select
Application.CutCopyMode = False


Columns("K:K").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.Size = 6
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic



End With
End Sub





"Héctor Miguel" escribió:

hola, Adalberto !

> grabe una macro... y corre muy rapido... migrar de un archivo .csv que ejecuta una consulta de discoverer...
> en promedio, cuando la corro tarda 1 o 2 segundos, pero al pasar del tiempo, (2 semanas)
> se va haciendo mas lenta hasta llegar a tardar 3 o 4 min,
> que puedo hacer para que siempre sea rapida?

sin 'ver' lo que hace la macro [y +/- como y donde va 'depositando' resultados, etc. etc. etc.]... -?-
de entre algunas de la posibles que causas pudieran verse 'involucradas'...
-> que la macro haga un 'barrido' de [todas ?] las celdas/filas de alguna hoja -?-
-> que se 'corran' depuraciones/compilaciones/... en el proyecto de macros -?-
-> que la hoja donde se vacian datos vaya 'creciendo' -?-
-> ??? [hay demasiadas posibilidades aun 'abiertas'] :))

si no puedes/quieres/... 'exponer' el codigo de dicha macro...
comentas algun detalle adicional ?
saludos,
hector.



Respuesta Responder a este mensaje
#4 ADALBERTO MARTINEZ
07/01/2006 - 14:17 | Informe spam
Gracias, de antemano Marianoh

en las hojas no tengo botones, las corro directamente del menu de visual basic
sabras alguna otra posible solucion?

gracias.

"Marianoh" escribió:

Adalberto:

He tenido el mismo problema. Mi archivo es un original que cada día
se guarda como una copia nueva, por lo que no hay cambios en el mismo,
sin embargo con el correr del tiempo la ejecución de algunas macros se
ralentiza sobremanera.
La única solución que he encontrado es eliminar los controles
incrustados en las hojas (yo utilizaba varios CommandButton para
activar las macros). No se por que pero eso solucionó el problema.

Saludos: MarianoH


Respuesta Responder a este mensaje
#5 Héctor Miguel
08/01/2006 - 07:30 | Informe spam
hola, Adalberto !

... el archivo no crece, se va haciendo mas peque#o o en su defecto se queda del mismo tama#o (filas,lineas y bytes)
no se sobre compilaciones y depuraciones, pero creo que la macro no tiene esto,
te ayudaria que pegara toda la macro completa? [...]



solo como comentario 'al margen'... cada vez que se ejecuta una macro... se 'corre' una compliacion del codigo
[entonces] existen 'ciertas' acciones [por codigo] que van 'degenerando' las macros [y creciendo el archivo] :-((

solo he 'tratado' de suponer el resto de las 'variables' bajo las circunstancias 'reales' en las que ejecutas la macro expuesta
[aprovechando que a las macros de la grabadora -generalmente- se les puede 're-programar' de manera mas... 'entendible']
como el codigo 'generado' es -bastante- 'repetitivo' y en ocasiones hasta 'excesivo'... le he dado una 'aligeradita'
que espero ayude a 'mantener' la velocidad 'original', [p.e.] evitando una 'danza' entre re/seleccion de rangos y columnas [etc.]

estoy suponiendo que el archivo .csv ya se encuentra abierto y la macro 'se ejecuta' SOLAMENTE desde el libro 'original'
-> "LISTA MAESTRA ITR 2005.xls" -?- [aunque sin 'el resto' de las variables]... ya comentaras donde 'le va doliendo' :))

saludos,
hector.

Sub Migracion()
Dim Criterios, Sig As Byte, Fila_n As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Criterios = Array("=", "224A,", "432,215,432,215,", "213,", "910,225,", "261,226,", _
"432,432,215,", "432,215,", "461,871,204,", "224,223,", "431,215", "431,215,", _
"431,224,", "431,224", "225,201,", "221,", "225,", "223,", "224,", "215,", _
"226,461,872,204,", "470,215,", "826,", "226,")
Range(Range("a7", Range("a65536").End(xlUp)).EntireRow.Delete
With Workbooks("Fecha_Requerida.csv")
.Range("k1:l1").EntireColumn.Delete: .Range("a2:k2").AutoFilter
With .Range(.Range("a3", .Range("a65536").End(xlUp)).Resize(,11)
For Sig = LBound(Criterios) To UBound(Criterios)
.AutoFilter Field:, Criteria1:=Criterios(Sig): .EntireRow.Delete
Next: End With: .Range("a2:k2").AutoFilter
With .Range(.Range("a3:k3"), .Range("a3:k3").End(xlDown))
.Sort Key1:=.Parent.Range("b3"), Order1:=xlAscending, Header:=xlGuess
.Copy Range("c7"): End With: .Close SaveChanges:=False: End With
Range("a7") = 1: Range("a8").Formula = "§+1"
Range("b7").Formula = "=$e$4": Range("b8").Formula = "=$e$4"
Fila_n = Range("c65536").End(xlUp).Row
Range("a8:b" & Fila_n).FillDown
Range("k7").Formula = _
"=if(c7=lookup(c7,inttercambios!c:c),lookup(c7,inttercambios!c:c,inttercambios!n:n),if(j7<$e$3" & _
",""RETRASADO"",if(j7<$e$3+5,""URGENTE"",if(d7=lookup(d7,urgentes!b:b),""PRIORIDAD"",""""))))"
With Range("k7:k" & Fila_n): .FillDown
.HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: End With
With Range("n7"): .Formula = "=$e$3-i7"
.NumberFormat = "_-* #,##0_-;-* #,##0_-;_-* ""-""??_-;": End With
Range("n7:n" & Fila_n).FillDown: Calculate
With Range("a7:n" & Fila_n): .AutoFilter Field:=3, Criteria1:="=": .EntireRow.Delete
.AutoFilter Field:=4, Criteria1:="=": .EntireRow.Delete: .AutoFilter: End With
Fila_n = Range("a65536").End(xlUp).Row
With Range("a7:n" & Fila_n): .Copy: .PasteSpecial xlPasteValues
.Font.Name = "Arial": .Font.Size = 7: Range("k7:k" & Fila_n).Font.Size = 6
With .Borders(xlEdgeLeft): .LineStyle = xlContinuous: .Weight = xlHairline: End With
With .Borders(xlEdgeRight): .LineStyle = xlContinuous: .Weight = xlHairline: End With
With .Borders(xlEdgeTop): .LineStyle = xlContinuous: .Weight = xlHairline: End With
With .Borders(xlEdgeBottom): .LineStyle = xlContinuous: .Weight = xlHairline: End With
With .Borders(xlInsideVertical): .LineStyle = xlContinuous: .Weight = xlHairline: End With
With .Borders(xlInsideHorizontal): .LineStyle = xlContinuous: .Weight = xlHairline: End With
.Columns(5).WrapText = True: .Columns(11).WrapText = True: .Columns(13).WrapText = True
End With: Range("a7").Select: Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic: ActiveSheet.UsedRange
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida