dudas con ScreenUpdating

06/12/2006 - 22:56 por Ivan | Informe spam
hola a todos de nuevo

a ver si me podeis echar una mano para aclarar varias duda, respecto al
uso de Application.ScreenUpdating, que llevo arrastrando desde hace
tiempo.

1º la mas basica seria que, por lo que creo recordar, en la ayuda te
aconsejan que, si lo pones a false por alguna causa (en mi caso en gran
parte de los codigos) se vuelva a asignar el valor True a
ScreenUpdating al acabar de realizar la tarea para la que lo has puesto
a false. En general suelo hacerlo, por si acaso.

el problema estaria en que cuando interrumpes la ejecucion por alguna
causa (pej: Exit Sub) lo suyo supongo que seria volverlo a poner a true
(si lo has puesto a false, por supuesto) antes de salir, lo cual no
deja de ser un tanto engorroso en algunas ocasiones (al menos para mi )

pero, dado que en la mayoria de las ayudas de los expertos en el foro,
no se suele volver a poner a True, supongo que no debe ser demasiado
importante.

esto es lo que me gustaria saber: ¿hasta que punto y por que puede
suponer algun perjuicio el no volver a ponerlo a true, o si existen
situaciones especiales en la que si conviene?

2ª duda: si un procedimiento que llama a otro tiene asignado False a
ScreenUpdating ¿es valido tambien a la ejecucion del proc./funcion
llamado.?.

y, si dentro de procedimiento (o funcion) llamado tambien se pone a
false, pero se vuelve a poner a true al salir de el, ¿afecta al estado
de la propiedad en el procedimiento llamante?

bueno, no se si me entiende del todo, pero mas o menos estas son las
dudas que no consigo aclarar rastreando por ahi. Si podeis echarme una
mano os lo agradezco.

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
07/12/2006 - 03:21 | Informe spam
hola, Ivan !

1) [hasta donde se]...
a) mientras 'persista' una instruccion: -> Application.ScreenUpdating = False
a menos que otro codigo cambie a: -> Application.ScreenUpdating = True
[incluso por codigos intermedios/llamados/... o se termine de ejecutar el codigo]...
no se actualiza 'el refresco' de la pantalla [ni ves lo que hace el codigo en la ventana del excel]
b) [o sea]... el 'refresco' de la pantalla se devuelve a True automaticamente al terminarse la ejecucion de codigo
a menos que... la hubieras puesto en false al usar metodos de eventos [como un 'printpreview']
y NO la hubieras regresado a True [cosa que 'en este preciso caso'... no sucede de manera 'automatica'] :-((
-> recuerda la conversacion que 'sostuvimos' al respecto en septiembre -> 'vista previa sin cerrar formulario' :D

2) de acuerdo con el punto anterior, para [tratar de] 'responder' a tu segunda interrogante...
-> prueba con la siguiente 'secuencia' de mensajes por macro [unas llaman a la que sigue] PERO... en dos 'versiones':
a) primero ejecuta la macro 'A' asi, simple y llana [directa y sin interrupciones]
b) la segunda vez, procura 'mover' la posicion de cada cuadro de mensaje para que aprecies el 'congelamiento' de la pantalla :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Sub A()
Application.ScreenUpdating = False
MsgBox "Llamando al procedimiento B"
B
MsgBox "El show se ha terminado !!!"
End Sub
Sub B()
MsgBox "A la orden, jefe !"
MsgBox "Ahora viene el procedimiento que sigue... el C"
C
End Sub
Sub C()
MsgBox "Tarde... pero sin sueño :)"
End Sub

__ la consulta original __
__ 1 __
... duda, respecto al uso de Application.ScreenUpdating, que llevo arrastrando desde hace tiempo.
... en la ayuda te aconsejan que, si lo pones a false por alguna causa (en mi caso en gran parte de los codigos)
se vuelva a asignar el valor True a ScreenUpdating al acabar de realizar la tarea... En general suelo hacerlo, por si acaso.
el problema estaria en que cuando interrumpes la ejecucion por alguna causa (pej: Exit Sub)
lo suyo supongo que seria volverlo a poner a true (si lo has puesto a false, por supuesto) antes de salir
lo cual no deja de ser un tanto engorroso en algunas ocasiones (al menos para mi )
pero, dado que en la mayoria de las ayudas... en el foro, no se suele volver a poner a True
supongo que no debe ser demasiado importante.
esto es lo que me gustaria saber: hasta que punto y por que puede suponer algun perjuicio el no volver a ponerlo a true
o si existen situaciones especiales en la que si conviene?


__ 2 __
... si un procedimiento que llama a otro tiene asignado False a ScreenUpdating es valido tambien a la ejecucion del proc./funcion llamado.?.
y, si dentro de procedimiento (o funcion) llamado tambien se pone a false, pero se vuelve a poner a true al salir de el
afecta al estado de la propiedad en el procedimiento llamante? [...]
Respuesta Responder a este mensaje
#2 Ivan
07/12/2006 - 20:40 | Informe spam
hola Hector Miguel, muchas gracias de nuevo

el ejemplo es totalmente didactico, y, dandole unas cuantas vueltas,
practicamente ha borrado de un plumazo la mayoria de las dudas que
tenia sobre el tema.

en relacion a 'aquella' conversacion, la verdad es que me sonaba haber
tenido mas de un comentario contigo respecto a screenupdating, pero no
lograba ubicarla, y en aquel caso creo que yo me fui por otros
derroteros.

por cierto no deja de asombrarme tu capacidad para recordar
conversaciones (entre bastantes otras cosas). Si, ya te he leido
alguna vez decir que tienes un sistema y tal, y tal, ..pero no se
porque me da que el principal sistema lo tienes entre las cejas, y,
aunque esta vez si haya algo de adulacion en mis palabras, creo que el
foro entero estara de acuerdo conmigo en que es una adulacion mucho mas
que merecida, aparte de (creo que) totalmente descriptiva

volviendo al tema, supongo que por 'metodos de eventos', te refieres a
los metodos en los que cedes el control al usuario pero en los que, por
decirlo de alguna manera, el procedimiento sigue abierto, a la espera
de retomar el control para finalizar la ejecucion, que seria cuando se
volveria a poner a true realmente. De lo que parece desprenderse que,
durante ese intervalo en que se cederia el control al usuario el
refresco de pantalla estaria desactivado ¿pero, aparte de los
evidentes efectos visuales que se producen cuando es asi, que otros
efectos secundarios, si es que existen, se pueden producir (suponiendo
por supuesto que en algun momento volveras a activarla)?

en cualquier caso, como ya te he dicho, tu ejemplo (es curioso como
algo tan sencillo puede ser tan util) ha despejado casi del todo mis
dudas sobre el tema. Muchas gracias de nuevo

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 Héctor Miguel
08/12/2006 - 06:05 | Informe spam
hola, Ivan !

... supongo que por 'metodos de eventos', te refieres a los metodos en los que cedes el control al usuario...
... en los que... el procedimiento sigue abierto, a la espera de retomar el control para finalizar la ejecucion...
... parece desprenderse que, durante ese intervalo en que se cederia el control al usuario el refresco de pantalla estaria desactivado
... aparte de los evidentes efectos visuales que se producen cuando es asi que otros efectos secundarios
... se pueden producir (suponiendo por supuesto que en algun momento volveras a activarla)?
... tu ejemplo (es curioso como algo tan sencillo puede ser tan util) ha despejado casi del todo mis dudas sobre el tema...



solo es cuestion de que agregues un screenupdating en true [p.e.] en alguno de los cuadros del ejemplo...
[obviamente] misntras vas 'moviendo' los cuadros mostrados y veras el efecto del false/true con el refresco de la pantalla ;)

saludos,
hector.

p.d. con relacion a la 'capacidad de recordar...' [que yo sepa, no existe memoria buena/mala... solo ejercitada o no] ;)
[como ya lo dijo Confucio]... 'perdura mas, la mas palida tinta... que la mas brillante memoria' :D
lo que hay 'entre las cejas' [definitivamente] ma 'aporta' la idea de frases/palabras/... 'clave' que buscar en mis 'recuerdos/registros'
el 'peso especifico' de dichos recuerdos/registros... es lo que realmente 'hace la tarea' :))
Respuesta Responder a este mensaje
#4 Ivan
08/12/2006 - 13:41 | Informe spam
Hola Hector Miguel, gracias otra vez

solo es cuestion de que agregues un screenupdating en true [p.e.] en alguno de los cuadros del ejemplo...
[obviamente] misntras vas 'moviendo' los cuadros mostrados y veras el efecto del false/true con el refresco de la pantalla ;)



en realidad esta es una de las pruebas que hice tras tu 1er mensaje, y
una de las cosas que ha logrado disipar mis dudas con el tema.
De hecho, esos son los efectos visuales a los que me referia.

Ahora mis dudas van mas bien sobre si puede provocar algun percance
mas grave, como corrupcion de archivos, o secuelas en el uso de otros
programas o archivos

y, si no te importa, añado otra peticion de consejo/opinion->

tengo bastantes funciones en el proyecto que trabajan sobre rangos, en
general con 'For Each'. Tu que recomendarias ¿poner ScreenUpdating a
False en cada funcion, o hacerlo en los procedimientos llamantes, o
ambas cosas si lo considero necesario? por supuesto tomando las debidas
precauciones para los casos que comentas.

otro saludo y hasta pronto
Ivan

PD:-> > p.d. con relacion a la 'capacidad de recordar...' [que yo sepa,
no existe memoria buena/mala... solo ejercitada o no] ;)

aun asi no dejo de asombrarme.
Respuesta Responder a este mensaje
#5 Héctor Miguel
09/12/2006 - 03:27 | Informe spam
hola, Ivan !

tengo bastantes funciones en el proyecto que trabajan sobre rangos, en general con 'For Each'.
Tu que recomendarias poner ScreenUpdating a False en cada funcion, o hacerlo en los procedimientos llamantes
o ambas cosas si lo considero necesario? por supuesto tomando las debidas precauciones para los casos que comentas.



dependiendo de 'que' es lo que hagas con cada elemento del 'For Each...Next' [ya que p.e.]
considera que ni siquiera es necesario 'seleccionar' cada elemento, incluso ni siquiera la hoja donde se encuentre ;)
y [en general] a menos que sea necesario algun 'refresco' [momentaneo/temporal] de la pantalla... yo lo dejaria en el 'principal' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida