Macro con lentitud

15/05/2004 - 04:46 por Compumakro | Informe spam
Amigos:
La siguiente Macro ocasionó mucha lentitud en sus procesos, pero solamente
en la hoja donde está.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Juanca As Integer
For Juanca = 2 To 500
If Cells(Juanca, 6) = 3 Then
Cells(Juanca, 7) = "DIRECTO"
End If
If Cells(Juanca, 6) = 5 Then
Cells(Juanca, 7) = "MISION"
End If
If Cells(Juanca, 6) = 7 Then
Cells(Juanca, 7) = "COLTEMPORA"
End If
If Cells(Juanca, 6) = 9 Then
Cells(Juanca, 7) = "BACAGRA"
End If
If Cells(Juanca, 6) = "" Then
Cells(Juanca, 7) = ""
End If
Next Juanca
End Sub

Hay alguna forma para que no la ponga tan lenta?

Gracias
Oscar
Barranquilla

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
15/05/2004 - 08:19 | Informe spam
hola, Oscar !

La siguiente Macro ocasiono mucha lentitud en sus procesos, pero solamente en la hoja donde esta [...]
Hay alguna forma para que no la ponga tan lenta?



algunas 'observaciones' del 'porque' de la lentitud...
1.- es un 'ciclo' que [invariablemente] recorre 499 celdas y 'revisa' 5 [posibles] 'comparaciones'
... lo que 'ocasiona' [practicamente] 2,500 'detenciones' del codigo :((
2.- esta 'asociado' a [puesto en] el evento '_SelectionChange' de 'la hoja' [donde 'ocasiona' la lentitud]
... el cual, se 'dispara' CADA VEZ que el usuario cambia de seleccion de la celda 'activa' :((
[como nota 'adicional', al modificarse una celda, el evento se 're-dispara' -aun SIN 'cambiar' de celda-]
3.- si [realmente] es 'ahi' donde la necesitas [y 'tal como esta']...
prueba usando como primera instruccion un =>Application.ScreenUpdating = False<
seria 'bueno' revisar lo que [realmente] necesitas 'obtener' con [y 'cuando' deberia ejecutarse] la macro ;)
¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Henry Sanchez
15/05/2004 - 16:52 | Informe spam
Hola Oscar

El Revisa primero si realmente es necesario colocar estas
instrucciones dentro del procedimiento de evento
SelectionChange de la hoja de trabajo, no parece muy
logica que todo esto deba ejecutar cada vez que
seleccionas una celda de Excel.

Si verdaderamente el codigo debe ejecutarse cada vez que
cambias de seleccion y si no es necesario que durante los
cambios se ejecuten instruciones guardadas en los
procedimientos de evento Change y/o Calculate de la hoja
de trabajo, prueba agregar estas dos instrucciones que
agilizaran un poco el proceso:

antes de For Juanca=2 to 500 usa la instruccion
Application.EnableEvents=False y despues de la
instruccion Next Juanca, usa la instruccion
Application.EnableEvents=True

Saludos,

Henry



Amigos:
La siguiente Macro ocasionó mucha lentitud en sus


procesos, pero solamente
en la hoja donde está.

Private Sub Worksheet_SelectionChange(ByVal Target As


Range)
Dim Juanca As Integer
For Juanca = 2 To 500
If Cells(Juanca, 6) = 3 Then
Cells(Juanca, 7) = "DIRECTO"
End If
If Cells(Juanca, 6) = 5 Then
Cells(Juanca, 7) = "MISION"
End If
If Cells(Juanca, 6) = 7 Then
Cells(Juanca, 7) = "COLTEMPORA"
End If
If Cells(Juanca, 6) = 9 Then
Cells(Juanca, 7) = "BACAGRA"
End If
If Cells(Juanca, 6) = "" Then
Cells(Juanca, 7) = ""
End If
Next Juanca
End Sub

Hay alguna forma para que no la ponga tan lenta?

Gracias
Oscar
Barranquilla


.

Respuesta Responder a este mensaje
#3 Compumakro
16/05/2004 - 00:16 | Informe spam
Hola Hector y Henry
Lo que tengo es un número de código y un nombre de vínculo, algo asi como "4
= Tomate"
Pero son como 500 personas con nombre "vínculo", por eso no hay otra cosa
que hacer.
Hice el siguiente cambio:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Juanca As Integer
Application.EnableEvents = False
For Juanca = 2 To 500
If Cells(Juanca, 6) = 3 Then
Cells(Juanca, 7) = "DIRECTO"
End If
If Cells(Juanca, 6) = 5 Then
Cells(Juanca, 7) = "MISION"
End If
If Cells(Juanca, 6) = 7 Then
Cells(Juanca, 7) = "COLTEMPORA"
End If
If Cells(Juanca, 6) = 9 Then
Cells(Juanca, 7) = "BACAGRA"
End If
If Cells(Juanca, 6) = "" Then
Cells(Juanca, 7) = ""
End If
Next Juanca
Application.EnableEvents = True
End Sub
Ahora quiero entender lo de Hector Miguel que no lo entiendo.
Application.ScreenUpdating = False

Gracias y un abrazo
Oscar
Barranquilla

"Héctor Miguel" escribió en el mensaje
news:%
hola, Oscar !

> La siguiente Macro ocasiono mucha lentitud en sus procesos, pero


solamente en la hoja donde esta [...]
> Hay alguna forma para que no la ponga tan lenta?

algunas 'observaciones' del 'porque' de la lentitud...
1.- es un 'ciclo' que [invariablemente] recorre 499 celdas y 'revisa' 5


[posibles] 'comparaciones'
... lo que 'ocasiona' [practicamente] 2,500 'detenciones' del codigo


:((
2.- esta 'asociado' a [puesto en] el evento '_SelectionChange' de 'la


hoja' [donde 'ocasiona' la lentitud]
... el cual, se 'dispara' CADA VEZ que el usuario cambia de seleccion


de la celda 'activa' :((
[como nota 'adicional', al modificarse una celda, el evento se


're-dispara' -aun SIN 'cambiar' de celda-]
3.- si [realmente] es 'ahi' donde la necesitas [y 'tal como esta']...
prueba usando como primera instruccion un


=>Application.ScreenUpdating = False<>
seria 'bueno' revisar lo que [realmente] necesitas 'obtener' con [y


'cuando' deberia ejecutarse] la macro ;)
¿comentas?
saludos,
hector.

Respuesta Responder a este mensaje
#4 Manuel Romero
17/05/2004 - 21:14 | Informe spam
Oscar, casi paisano, porque no usas la funcion VLOOKUP en lugar de la macro
que hace lo mismo

"Compumakro" escribió en el mensaje
news:
Amigos:
La siguiente Macro ocasionó mucha lentitud en sus procesos, pero solamente
en la hoja donde está.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Juanca As Integer
For Juanca = 2 To 500
If Cells(Juanca, 6) = 3 Then
Cells(Juanca, 7) = "DIRECTO"
End If
If Cells(Juanca, 6) = 5 Then
Cells(Juanca, 7) = "MISION"
End If
If Cells(Juanca, 6) = 7 Then
Cells(Juanca, 7) = "COLTEMPORA"
End If
If Cells(Juanca, 6) = 9 Then
Cells(Juanca, 7) = "BACAGRA"
End If
If Cells(Juanca, 6) = "" Then
Cells(Juanca, 7) = ""
End If
Next Juanca
End Sub

Hay alguna forma para que no la ponga tan lenta?

Gracias
Oscar
Barranquilla


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