Cerrar un msgbox después de una macro

Necesitaría saber como cerrar un msgbox (sin botones) después de haber ejecutado una macro. Mi idea es sustituir una barra de progreso por un mensaje que diga por ejemplo: " espera un momento" y acto seguido que se cierre el mensaje y aparezca otro informando de que la macro se ha ejecutado, p.e. " Actualización terminada " la barra de progreso tengo que quitarla porque tengo problemas con las distintas versiones de Excel.

2 respuestas

Respuesta
2

Te presento otra opción a la ya enviada por Dante.

Cada una de tus macros tendrá al finalizar unas instrucciones donde envía el mensaje a un control Label de un userform. Por ej:

Sub miMacro()
'x Elsamatilde
'instrucciones para este proceso
For Each sh In Sheets
sh.Name = sh.Name & "2017"
Next sh
'envía mensaje 'personalizado' al formulario y lo muestra unos segundos
UserForm1.Label1.Caption = "El proceso 1 finalizó.... se continúa con el resto."
UserForm1.Show
End Sub

Además, desde el Editor tendrás que insertar un Userform y dibujarle allí un control Label (en mi ejemplo se llama Label1. Al formulario solo le coloqué el texto 'Avance' en su propiedad Caption.

La macro que tendrá este UF es la siguiente donde se indica el tiempo de muestra:

Private Sub UserForm_Activate()
Application. Wait Now + TimeValue("00:00:02") '2 segundos... ajustar a gusto
Unload Me
End Sub

Si necesitas alguna otra aclaración, comenta. Sino no olvides valorar la respuesta para darla por cerrada.

Gracias por tu respuesta, mi siguiente pregunta es; ¿no habría manera de que el UserForm se cerrara automáticamente al acabar una macro?. Lo que quisiera es que al terminar una macro que tarda entre 30 y 50 segundos en ejecutarse se cerrara el UserForm que dice p.e. "Espera un momento". 

Gracias de nuevo.

Necesitaría saber como cerrar un msgbox (sin botones) después de haber ejecutado una macro. Mi idea es sustituir una barra de progreso por un mensaje que diga por ejemplo: " espera un momento" y acto seguido que se cierre el mensaje y aparezca otro informando de que la macro se ha ejecutado, p.e. " Actualización terminada " la barra de progreso tengo que quitarla porque tengo problemas con las distintas versiones de Excel. La ayuda de Dante me ha venido bien pero no sé por qué el Label1 no me aparece en el UserForm.

Y eso es lo que justamente sucede.

Cada una de tus macros o subrutinas, al finaluzar invocan a un Userforrm, el cual al activarse hace correr un reloj durante unos segundos y luego se cierra.

¿

¿Quizás te falto colocar el código dentro del Userform?

Sdos!

Explicame donde se ejecuta tu macro...'Necesitaría saber como cerrar un msgbox (sin botones) después de haber ejecutado una macro....

¿También estará en algún Userform? Querés enviarme tu modelo (*) ¿O dejarme un correo tuyo y yo te lo solicito? O puedo enviarte el modelo aquí propuesto para que veas cómo funciona, porque creo es lo que necesitas.

(*) Mis correos aparecen en mi sitio que dejo al pie.

Sdos!

Hola Elsa; La macro se ejecuta al presionar un botón, ésta macro actualiza unas hojas desde otro libro de excel, pues bien; el formulario debe aparecer antes de que se ejecute la macro y cerrarse al finalizar dicha macro. Esa es la idea. Perdóname por no haber sabido explicarme mejor de lo que lo he hecho.

Gracias por tu interés.

Bien, en ese caso son otros los pasos a seguir.

1 - En el Editor insertá un Userform, dejá dejá su propiedad ShowModal en False. Colocá un control Label

2 - El código que debes colocar en el Userform es el siguiente (ajustando nombre de tu macro principal y tiempo para mostrar mensaje antes de llamar al proceso)

Private Sub UserForm_Activate()
'x Elsamatilde
Application.Wait Now + TimeValue("00:00:02")  '2 segundos... ajustar a gusto
'luego de 2 segundos comenzará el proceso (ajustar nombre de macro)
Call macroLibro
End Sub

3- El botón que ya tenés para llamar a la macro debe contener solo estas instrucciones. 

Sub Button1_Click()    'botón que llama al proceso principal
'ejemplo de Elsamatilde
'se llama al UF con un mensaje personalizado
UserForm1.Label1.Caption = "A continuación se ejecutará la macro xxxxx"
UserForm1.Show
'NOTA: EL Userform debe tener su propiedad showmodal en false
End Sub

4- Y la macro principal, que en mi ejemplo se llama 'macroLibro' tendrá instrucciones adicionales al final:

Sub macroLibro()
'proceso principal: aquí solamente rellena una hoja
Sheets(2).[A1] = Now()
For i = 1 To 1000
Sheets(2).Range("A" & i) = Now + (10 * i)
Next i
'envía el mensaje de fin al uf
UserForm1.Label1.Caption = "Finalizó el proceso de la macro xxxxx"
Application.Wait Now + TimeValue("00:00:02")  '2 segundos... ajustar a gusto
'se cierra el uf
Unload UserForm1
End Sub

Retirá las 1ras 4 instrucciones de mi ejemplo, dejando allí todo tu proceso, que por supuesto debe terminar en este libro y en esta hoja donde se está mostrando el uf.

Si necesitas el ejemplo podés solicitarmelo a alguno de mis correos.

Y si necesitas 'personalizar un poco más tu formulario deja nuevas consultas en el tablón iniciando el mensaje con el texto 'Para Elsa' así las encuentro.

Nota: si vas a tener varios procesos utilizarás el mismo UF al que solo le tendrás que enviar un mensaje para cada situación.

Si esta opción resuelve tu consulta agradeceré mejores tu valoración atento al tiempo dedicado a ella.

¡Gracias! creo que es una buena solución.

gracias Elsa

Creo que tanto tiempo dedicado podría merecer una mejor valoración... podrás cambiarla en cualquier momento.

Sdos!

Respuesta
2

Puedes utilizar esto

Application.statusbar = "Espere un momento"

Te pone un mensaje en la parte inferior izquierda de excel.

Al finalizar tu macro pon lo esto para quitar el mensaje:

Application.statusbar = False

Otra alternativa es abrir un userform con tu mensaje, ejecutar la macro y al final fe la macro cerrar el userform.

Tengo un userform que simula la barra de progreso, no utiliza el control progressbar, solamente necesita de un cuadro y una imagen. Pero se tiene que adaptar a tu macro para que vaya presentando el avance.

Prueba con las 2 primeras alternativas y me comentas si es lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas