El siguiente código de VBA se detiene en Me.Show
. Según mis pruebas, parece que Me.Show
detiene la ejecución de todos los códigos, incluso si el código está dentro del UserForm.¿Por qué mostrar un UserForm como ejecución modal de código de detención?
Esta parte está fuera del UserForm:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
Esta parte está dentro de la UserForm:
Private Sub ShowProgress()
Me.Show vbModal
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond/5 * 100
Next intSecond
Me.Hide
End Sub
El código se detiene en Me.Show
, después de que se muestra el formulario de usuario. No hay ningún error, solo interrumpe la ejecución del código. Parece que la única manera de ejecutar código dentro de un formulario de usuario modal en VBA es incluirlo en el procedimiento UserForm_Activate así:
Esta parte está fuera del formulario de usuario:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
Esta pieza dentro del formulario de usuario:
Private Sub UserForm_Initialize()
Me.Show vbModal
End Sub
Private Sub UserForm_Activate()
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond/5 * 100
Next intSecond
Me.Hide
End Sub
Por supuesto, no puedo poner Me.Show
dentro UserForm_Activate porque eso procedimiento sólo se activa después de la UserFo rm Mostrar evento.
La documentación para UserForm.ShowModal
dice "Cuando un formulario de usuario es modal, el usuario debe proporcionar la información o cerrar el formulario de usuario antes de usar cualquier otra parte de la aplicación. Ningún código subsiguiente se ejecuta hasta que el formulario de usuario está oculta o descargada."
Estoy tratando de usar un UseForm modal como una barra de progreso para evitar que el usuario interactúe con la aplicación mientras se ejecuta un proceso. Pero esto será difícil de lograr si todo mi código tiene que estar dentro del procedimiento UserForm_Activate.
Me estoy perdiendo algo aquí? ¿Por qué se detiene la ejecución de todos los códigos en Me.Show
?
Todo lo que realmente necesita hacer si quiere seguir siendo capaz de interactuar con la hoja mientras que la forma es de hasta es usar este código al llamar el formulario de usuario: 'userform.show vbModeless'. – Casey