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
Vous devez vous connecter pour publier un commentaire.
Lorsque le formulaire est affiché avec
vbModal
, le code de suspendre l'exécution et d'attendre que l'interaction de l'utilisateur avec le formulaire. Par exemple en cliquant sur un bouton ou à l'aide d'une liste déroulante.Si vous mettez à jour la forme de la propriété
et supprimer
vbModal
à partir de votre code. Cela va permettre l'exécution de code à continuer lorsque le formulaire est affiché.Qui n'a pas fonctionné pour moi. L'appel
sub
ne continue de fonctionner, mais absolument pas de composants sont rendus, pas même une simple étiquette.OriginalL'auteur Robert Mearns
J'étais à la recherche d'une réponse à pourquoi je recevais le message d'erreur suivant:
lors de l'exécution de cette ligne de code:
même si cette ligne fonctionne:
De cours. Vrai n'est pas le même que vbModal! Donc, la réponse la plus simple est d'utiliser le bon d'énumérations:
OriginalL'auteur Jamie Garroch
Je pense que j'ai compris cela.
Après
Me.Show
la UserForm_Activate événement se déclenche. Si il n'y a pas de code dans le UserForm_Activate procédure ne se passera rien car VBA est en attente pourMe.Hide
.Donc l'ordre des événements est:
Me.Show
>UserForm_Activate
>Me.Hide
Tout le code que je veux exécuter doit être dans le UserForm_Activate procédure, et doit être avant
Me.Hide
.La structure est très stricte, mais je peut être en mesure d'utiliser cette structure à mon avantage.
userform.show vbModeless
.OriginalL'auteur Kuyenda
Je pense que j'ai tout compris
Essayez de faire cette étape simple
En vous forme un clic droit sur la banque partie et cliquez sur propriétés
Changer la "ShowModal" pour de Faux
ou dans le code VBA lorsque vous afficher l'objet userform en utilisant le code suivant:
UserForm1.Montrer De Faux
OriginalL'auteur Eduard
Je ne sais pas vraiment ce qui se passe dans votre esprit, car il existe une grande variété de code pour ce que vous êtes en question, mais j'espère que cela peut aider à
Privé Sous cmdSwitch_Click()
UserForm1.Masquer
UserForm2.Montrer
End Sub
OriginalL'auteur Eduard