Pantalla mientras ejecuta macro

09/03/2005 - 10:20 por Luiszx | Informe spam
Tengo una macro que realiza una serie de acciones entre varias hojas del
libro. Cuando se ejecuta se ven los saltos entre hojas al seleccionar,
copiar, pegar,.. ¿Se puede evitar que se vean estos saltos y en su lugar
aparezca una pantalla en la que se indique algo así como: "Espere unos
segundos"?

Preguntas similare

Leer las respuestas

#1 KL
09/03/2005 - 11:21 | Informe spam
Hola Luiszx,

Unas cuantas cosas:

se ven los saltos entre hojas al seleccionar,
copiar, pegar,..



Te recuerdo q para manipular libros, hojas, rangos, datos, etc en la moyoria
absoluta de los casos no es necesario seleccionar, ni activarlos.

¿Se puede evitar que se vean estos saltos



- Lo de arriba puede ser tu primera oportunidad para eliminar/reducir el
parpadeo.

- Otra cosa q podrias hacer es incluir en tu codigo (al principio y al
final) las siguientes instrucciones:

Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True

esto congelara la pantalla antes de correr el macro y la descongelara cuando
se hayan realizado todas las modificaciones.

y en su lugar
aparezca una pantalla en la que se indique algo así como: "Espere unos
segundos"?



1) Supongamos q tu macro se llama MiMacro y se encuentra en algun modulo q
no sea de hoja, libro o formulario. Modificalo para q quede mas o menos asi:

'Inicio Codigo -
Sub MiMacro()
Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True
End Sub
'Fin Codigo -

2) Crea un Formulario y ponle un nombre, digamos UserForm1
3) Dentro del formulario introduce una Etiqueta (Label) con el texto:"Espere
unos segundos"
4) En el modulo VBA de UserForm1 pon el siguiente codigo:

'Inicio Codigo UserForm1-
Private Sub UserForm_QueryClose _
(Cancel As Integer, CloseMode As Integer)
' Prevents use of the Close button
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub

Private Sub UserForm_Activate()
Call MiMacro
Unload Me
End Sub
'Fin Codigo UserForm1-

5) Ahora crea el siguiente macro en cualquier modulo:

'Inicio Codigo -
Sub Lanzar_MiMacro()
UserForm1.Show
End Sub
'Fin Codigo -

6) Usa este ultimo macro para lanzar tu codigo.

Saludos,
KL
Respuesta Responder a este mensaje
#2 Luiszx
09/03/2005 - 13:14 | Informe spam
Gracias. Únicamente tengo el problema de que no muestra en pantalla la
etiqueta del formulario; sólo aparece la línea de la propiedad caption y la
parte de abajo está toda en blanco. ¿Qué he hecho mal?

En cuanto a lo de que no hace falta seleccionar cosas de distintas hojas,
tienes razón, pero es que tengo poca práctica con VBA y utilizo la grabadora
para hacerlas cosas tal y como las haría manualmente. Voy a intentar pulir
el código.

"KL" escribió en el mensaje
news:%23%
Hola Luiszx,

Unas cuantas cosas:

>se ven los saltos entre hojas al seleccionar,
> copiar, pegar,..

Te recuerdo q para manipular libros, hojas, rangos, datos, etc en la


moyoria
absoluta de los casos no es necesario seleccionar, ni activarlos.

>¿Se puede evitar que se vean estos saltos

- Lo de arriba puede ser tu primera oportunidad para eliminar/reducir el
parpadeo.

- Otra cosa q podrias hacer es incluir en tu codigo (al principio y al
final) las siguientes instrucciones:

Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True

esto congelara la pantalla antes de correr el macro y la descongelara


cuando
se hayan realizado todas las modificaciones.

>y en su lugar
> aparezca una pantalla en la que se indique algo así como: "Espere unos
> segundos"?

1) Supongamos q tu macro se llama MiMacro y se encuentra en algun modulo q
no sea de hoja, libro o formulario. Modificalo para q quede mas o menos


asi:

'Inicio Codigo -
Sub MiMacro()
Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True
End Sub
'Fin Codigo -

2) Crea un Formulario y ponle un nombre, digamos UserForm1
3) Dentro del formulario introduce una Etiqueta (Label) con el


texto:"Espere
unos segundos"
4) En el modulo VBA de UserForm1 pon el siguiente codigo:

'Inicio Codigo UserForm1-
Private Sub UserForm_QueryClose _
(Cancel As Integer, CloseMode As Integer)
' Prevents use of the Close button
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub

Private Sub UserForm_Activate()
Call MiMacro
Unload Me
End Sub
'Fin Codigo UserForm1-

5) Ahora crea el siguiente macro en cualquier modulo:

'Inicio Codigo -
Sub Lanzar_MiMacro()
UserForm1.Show
End Sub
'Fin Codigo -

6) Usa este ultimo macro para lanzar tu codigo.

Saludos,
KL


Respuesta Responder a este mensaje
#3 KL
09/03/2005 - 13:50 | Informe spam
Hola Luiszx,

sólo aparece la línea de la propiedad caption y la
parte de abajo está toda en blanco. ¿Qué he hecho mal?



Pperdona, se me ha olvidado una pequeña cosa. Añade al codigo de MiMacro la
instruccion DoEvents, asi:

'Inicio Codigo -
Sub MiMacro()
DoEvents
Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True
End Sub
'Fin Codigo -


En cuanto a lo de que no hace falta seleccionar cosas de distintas hojas,
tienes razón, pero es que tengo poca práctica con VBA y utilizo la
grabadora
para hacerlas cosas tal y como las haría manualmente. Voy a intentar pulir
el código.



o pon aqui el codigo y te lo intentamos depurar.

Saludos,
KL
Respuesta Responder a este mensaje
#4 Luiszx
09/03/2005 - 14:30 | Informe spam
Gracias. Así funciona. Sólo tengo una cosa y es que mientras aparece en
pantalla el formulario si se hace click con el ratón en cualquier parte de
la pantalla, esos click se guardan para el final, de manera que en la hoja
que aparece después de ejecutarse la macro se van a hacer esos click, y
puede que por ello se activen cosas sin querer.

Ya sé que la solución consiste en no hacer click mientras está el
formulario, pero es que es una hoja que van a utilizar otras personas y no
quiero dar posibilidades de error.

"KL" escribió en el mensaje
news:
Hola Luiszx,

>sólo aparece la línea de la propiedad caption y la
> parte de abajo está toda en blanco. ¿Qué he hecho mal?

Pperdona, se me ha olvidado una pequeña cosa. Añade al codigo de MiMacro


la
instruccion DoEvents, asi:

'Inicio Codigo -
Sub MiMacro()
DoEvents
Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True
End Sub
'Fin Codigo -


> En cuanto a lo de que no hace falta seleccionar cosas de distintas


hojas,
> tienes razón, pero es que tengo poca práctica con VBA y utilizo la
> grabadora
> para hacerlas cosas tal y como las haría manualmente. Voy a intentar


pulir
> el código.

o pon aqui el codigo y te lo intentamos depurar.

Saludos,
KL


Respuesta Responder a este mensaje
#5 Manuel Romero
09/03/2005 - 19:52 | Informe spam
Para tu ultima solicitud puedes usar la propiedad statusbar

Application.StatusBar="Espere un momento..."
Application.ScreenUpdating=False
' tu codigo
Application.ScreenUpdating=True
Application.StatusBar=False

"KL" escribió en el mensaje
news:%23%
Hola Luiszx,

Unas cuantas cosas:

>se ven los saltos entre hojas al seleccionar,
> copiar, pegar,..

Te recuerdo q para manipular libros, hojas, rangos, datos, etc en la


moyoria
absoluta de los casos no es necesario seleccionar, ni activarlos.

>¿Se puede evitar que se vean estos saltos

- Lo de arriba puede ser tu primera oportunidad para eliminar/reducir el
parpadeo.

- Otra cosa q podrias hacer es incluir en tu codigo (al principio y al
final) las siguientes instrucciones:

Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True

esto congelara la pantalla antes de correr el macro y la descongelara


cuando
se hayan realizado todas las modificaciones.

>y en su lugar
> aparezca una pantalla en la que se indique algo así como: "Espere unos
> segundos"?

1) Supongamos q tu macro se llama MiMacro y se encuentra en algun modulo q
no sea de hoja, libro o formulario. Modificalo para q quede mas o menos


asi:

'Inicio Codigo -
Sub MiMacro()
Application.ScreenUpdating=False
'Tu codigo va aqui
Application.ScreenUpdating=True
End Sub
'Fin Codigo -

2) Crea un Formulario y ponle un nombre, digamos UserForm1
3) Dentro del formulario introduce una Etiqueta (Label) con el


texto:"Espere
unos segundos"
4) En el modulo VBA de UserForm1 pon el siguiente codigo:

'Inicio Codigo UserForm1-
Private Sub UserForm_QueryClose _
(Cancel As Integer, CloseMode As Integer)
' Prevents use of the Close button
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub

Private Sub UserForm_Activate()
Call MiMacro
Unload Me
End Sub
'Fin Codigo UserForm1-

5) Ahora crea el siguiente macro en cualquier modulo:

'Inicio Codigo -
Sub Lanzar_MiMacro()
UserForm1.Show
End Sub
'Fin Codigo -

6) Usa este ultimo macro para lanzar tu codigo.

Saludos,
KL


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