Pourquoi ne Montrant un objet UserForm comme Modale Arrêter l'Exécution de Code?

Le code VBA ci s'arrête à Me.Show. De mes tests, il semble que Me.Show arrête tous de l'exécution du code, même si le code est à l'intérieur de l'objet UserForm.

Cette partie est à l'extérieur de l'objet UserForm:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    objProgress.ShowProgress
    Unload objProgress
End Sub

Cette partie est à l'intérieur de l'objet 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

Le code s'arrête à Me.Show, après que l'objet UserForm s'affiche. Il n'y a pas d'erreur, c'est juste interrompt l'exécution du code. Il semble que le seul moyen d'exécuter du code à l'intérieur d'un modal UserForm en VBA est de l'inclure dans le UserForm_Activate procédure comme ceci:

Cette partie est à l'extérieur de l'objet UserForm:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    Load objProgress
    Unload objProgress
End Sub

Cette partie est à l'intérieur de l'objet 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 de UserForm_Activate car cette procédure ne se déclenche après que l'objet UserForm événement à Afficher.

La documentation pour UserForm.ShowModal dit "Lorsqu'un objet est modale, l'utilisateur doit fournir des informations ou à proximité de l'objet UserForm avant d'utiliser tout autre partie de l'application. Pas de code suivant est exécuté jusqu'à ce que l'objet est masqué ou déchargé."

Je suis en train d'utiliser un modal UseForm comme une barre de progression pour empêcher l'utilisateur d'interagir avec l'application de tout un processus s'exécute. Mais ce sera difficile à accomplir si tout mon code doit être dans le UserForm_Activate procédure.

Suis-je manqué quelque chose? Pourquoi tous d'exécution de code à arrêter au Me.Show?

OriginalL'auteur Kuyenda | 2009-11-23