7
votes

"Veuillez patienter" message popup

J'essaie de créer un Veuillez patienter code> message dans Excel VBA. Cela permet de rappeler à l'utilisateur traiter une requête SQL que le processus reste en cours. J'aimerais avoir ce message affiché dans une formulaire user.

Actuellement, l'utilisateur se connecte à SQL DB, sélectionne la base de données et d'autres options, appuyez sur ... et le formulaire ne décharge pas. Au point d'aller, j'ai une autre forme qui apparaît avec le message Veuillez patienter code>, mais ce formulaire ne décharge pas, c'est-à-dire que la commande SQL Exécuter ne fonctionne pas. P>

Mon code pour appeler Le veuillez patienter code> userform, y compris une étiquette: p> xxx pré>

dans un autre module de code que j'ai: p> xxx pré>

j'ai userform appelé attendre code> avec le code suivant: p> xxx pré>

Maintenant, lors de l'exécution du code, le temps d'exécution ne recule pas dans le Module Pour exécuter ce qui suit: P>

SQl.ExecuteSQl.Execute


0 commentaires

4 Réponses :


6
votes

Le comportement par défaut de la méthode FORM.SHOW consiste à afficher le formulaire sous forme de boîte de dialogue modale. Ce que vous cherchez est une boîte de dialogue sans faille, vous devez donc spécifier que, comme ceci: xxx pré>

mise à jour: p>

Si vous ne pouvez pas vous appeler une boîte de dialogue sans danger , vous avez d'autres options, comme mentionné dans un commentaire. L'un d'entre eux est de laisser l'attente userForm faire l'exécution de SQL. Cela pourrait être fait comme ceci: p>

dans la forme d'attente, d'abord déclarer des variables p> xxx pré>

et sous la forme principale: p>

Sub WaitShow()
   Wait.Init(the parameters...)
   Wait.Show
   Wait.GetReturns(the results...)
End Sub


4 commentaires

Merci pour la réponse GTG. J'ai déjà essayé cela et obtenez ceci: ne peut pas afficher une forme non modale lorsque la forme modale est affichée.


En outre, j'ai oublié de mentionner que le premier formulaire où l'utilisateur sélectionne les options est toujours affiché.


En supposant que votre premier formulaire doit être modal, vous pouvez également mettre votre code d'exécution SQL à l'intérieur de la formulaire utilisateur "En attente" ou appeler une fonction dans le formulaire parent à partir de la formulaire "En attente". De cette façon, vous n'avez pas besoin de modules supplémentaires. Une troisième option serait de créer un ActiveX .exe pour le formulaire "en attente" et laisser ce processus montrer un formulaire "en attente" sans faille. Cela nécessiterait cependant que vous déployez cela .exe avec votre feuille Excel.


Mais si je mettez l'exécution SQL à l'intérieur de l'UserForm "en attente", comment retournera-t-il au module principal où le formulaire d'attente a été appelé? Comme je dois exécuter d'autres choses du module principal après SQL Exec.



1
votes

Voici comment montrer une barre de progression pendant que vos utilisateurs attendent Excel pour terminer le traitement:

https://stackoverflow.com/a/10791349/138938

bar de progression Excel

Dans votre cas, vous pouvez deviner une période "moyenne" raisonnable pour vos requêtes et avoir la mise à jour de la barre de progression avec des pourcentages de cette époque, ce qui rassurera vos utilisateurs que Excel fonctionne et ne nécessite pas de paniquer. < / p>


0 commentaires

0
votes

Ma solution est beaucoup moins élégante et impressionnante que les autres. FYI, mon script fait le traitement pour un certain nombre de partenaires dans une ... prochaine boucle, et je souhaite mettre à jour l'écran avec le partenaire en cours de traitement actuellement.

J'ai créé une feuille de calcul appelée "Messages". J'ai élargi la cellule A1 aussi large et grande que possible, et j'ai choisi une police que j'ai aimé un jeu de couleurs que j'ai aimé. Mon script commence par éteindre l'enregistrement de l'écran. J'ai alors xxx

après cela, je retourne à la feuille dont j'ai besoin. Rien de fantaisie, mais c'est rapide, facile, et fait ce dont j'ai besoin. :)


0 commentaires

0
votes

J'utilise un bouton de commande sur le formulaire défini sur une très petite taille, masqué lorsque le formulaire charge, avec la légende "Veuillez patienter, traiter ..."

Je redimensionniste le bouton de l'événement IniliatLise de formulaire (je redimensionniste simplement à la taille de la forme à l'aide des propriétés supérieure, gauche, largeur et hauteur). Vous pouvez bien sûr faire la taille de votre taille.

Je rends le bouton de commande visible juste avant mon code consommant de temps et le rendre caché à nouveau à la fin du code.

nécessite des "doivents", mais fonctionne parfaitement.


0 commentaires