Le code VBA suivant s'arrête à Me.Show
. De mes tests, il semble que Me.Show
arrête toute exécution de code, même si le code est dans l'UserForm.Pourquoi afficher un UserForm comme exécution de code d'arrêt modal?
Cette pièce est en dehors de la UserForm:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
Cette pièce est à l'intérieur du formulaire utilisateur:
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
Le code arrête à Me.Show
, après que le formulaire utilisateur est affiché. Il n'y a pas d'erreur, cela interrompt simplement l'exécution du code. Il semble que la seule façon d'exécuter du code dans un UserForm modal dans VBA est de l'inclure dans la procédure UserForm_Activate comme ceci:
Cette partie est en dehors de la UserForm:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
Cette partie est à l'intérieur du UserForm:
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
Bien sûr, je ne peux pas mettre Me.Show
l'intérieur UserForm_Activate parce que la procédure ne se déclenche après l'UserFo rm Show event.
La documentation UserForm.ShowModal
dit « Lorsqu'un UserForm est modal, l'utilisateur doit fournir des informations ou fermer le formulaire utilisateur avant d'utiliser toute autre partie de l'application. Aucun code suivant est exécuté jusqu'à ce que le UserForm est masqué ou déchargé. » J'essaie d'utiliser un UseForm modal comme une barre de progression pour empêcher l'utilisateur d'interagir avec l'application pendant qu'un processus s'exécute. Mais ce sera difficile à accomplir si tout mon code doit être dans la procédure UserForm_Activate.
Ai-je raté quelque chose ici? Pourquoi toutes les exécutions de code s'arrêtent-elles à Me.Show
?
Tout ce que vous avez vraiment besoin de faire si vous voulez toujours être en mesure d'interagir avec la feuille alors que la forme est en place est d'utiliser ce code lorsque vous appelez le userform: 'userform.show vbModeless'. – Casey