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.
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
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).
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.
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.
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éé.
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
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