web-dev-qa-db-fra.com

Utiliser MsgBox sans suspendre l'application

J'ai besoin d'afficher un message à l'utilisateur. Lorsque je fais cela en utilisant MsgBox, le programme s'arrête jusqu'à ce que l'utilisateur clique sur la case. Je voudrais savoir s'il existe un moyen d'ouvrir le MsgBox sans interrompre le programme.

14
Patrick Villela

On dirait que vous n'attendez aucune entrée d'utilisateur de la MsgBox. Dans ce cas, selon votre application, le StatusBar peut être un substitut adéquat.

Dans Excel, c'est simple:

Application.StatusBar = "Please be patient..."
Application.StatusBar = iDone & " of " & iTotal & " items done."

Pour effacer la barre d'état une fois terminé:

Application.StatusBar = False

Dans Access, la syntaxe est un peu plus compliquée:

Temp = SysCmd(acSysCmdSetStatus, "Hey, look at me!") ' Puts out your message
Temp = SysCmd(acSysCmdClearStatus) ' Clears StatusBar
26

Pour autant que je n'ai jamais pu découvrir, la réponse est que vous ne pouvez pas. La solution de contournement est un formulaire personnalisé qui sert de boîte de dialogue.

Voir http://www.mvps.org/access/forms/frm0046.htm (pas précisément votre question, mais applicable).

6
Smandoli

MsgBox est modal (ce qui signifie que la fenêtre apparaît et arrête l'exécution du code jusqu'à ce qu'elle soit effacée). Comme d'autres affiches/commentateurs l'ont mentionné - votre alternative est d'écrire votre propre version d'une fenêtre contextuelle qui n'est pas modale. Ne vaut pas vraiment l'effort, sauf si vous en avez vraiment besoin de cette façon.

6
ktharsis

Créez plutôt un formulaire. J'ai créé un petit formulaire qui n'a qu'une zone de texte qui dit "Travailler, veuillez patienter". Au besoin, j'ouvre le formulaire, sous forme de fenêtre contextuelle (docmd openform "nom du formulaire"), généralement juste avant de commencer une opération qui va prendre un certain temps. Une fois le travail terminé, je ferme le formulaire (docmd close acform "form name"). Cela n'arrête pas le programme mais fournit un "Message" à l'utilisateur.

4
Sam

Dans l'éditeur VB: sélectionnez le menu Insertion UserForm. Dans la boîte à outils, sélectionnez TextBox: faites glisser un rectangle dans UserForm et saisissez-y votre texte. Cliquez avec le bouton droit sur UserForm et sélectionnez Propriétés. Dans ShowModal : sélectionnez False. Dans votre module VBA, saisissez UserForm1.Show où vous voulez l'activer et UserForm1.Hide où vous voulez le désactiver. UserForm1 est le mien, bien sûr, utilisez le nom approprié pour le formulaire que vous avez créé.

3
user4539187

Je crois que vous devez d'abord évaluer si vous avez vraiment besoin d'une msgbox pour apparaître et continuer à faire fonctionner le code.

La fonctionnalité msgbox (comme déjà indiqué) est modale et vous ne pouvez pas la "contourner". Cependant, vous pouvez créer un formulaire (similaire à la msgbox), définir ce formulaire comme "non modal" et appeler le code pour afficher ce formulaire. Le workflow de code continue. Testé et fonctionne dans Excel.

Mise à jour: Mon accès a perdu une référence, je ne pourrai plus la tester maintenant. J'espère que cela fonctionne également dans Access.

Rgds

1
Tiago Cardoso

Vous pouvez utiliser la méthode Popup de WScript. Voici les détails complets, y compris un exemple de code: http://msdn.Microsoft.com/en-us/library/x83z1d9f%28v=vs.85%29.aspx

1
HK1