Question

Quel est le meilleur moyen d'exécuter un programme externe à partir d'Excel. Cela peut durer plusieurs minutes. Quelle est la meilleure pratique pour y parvenir? Idéalement,

  1. Une boîte de dialogue modèle indiquant à l'utilisateur que le processus est en cours d'exécution.
  2. Si l'exécutable échoue, l'utilisateur doit recevoir une notification.
  3. Un délai d'attente doit être appliqué.
  4. Un bouton d'annulation devrait apparaître dans la boîte de dialogue.

Mais toutes les meilleures pratiques sont les bienvenues. Je suis intéressé par les solutions avec appel soit un fichier .dll ou un fichier .exe. De préférence, quelque chose qui fonctionne avec Excel '03 ou une version antérieure, mais j'aimerais connaître la raison pour laquelle nous passerons également à une version ultérieure.

Était-ce utile?

La solution

Vous devriez consulter ces deux articles sur la base de connaissances Microsoft

Comment lancer une application Win32 à partir de Visual Basic et

Comment utiliser une application 32 bits pour déterminer le moment où se termine un processus interrompu

Ils vous fournissent rapidement le cadre nécessaire pour lancer un processus, puis vérifier son achèvement. Chaque article de la base de connaissances contient des références supplémentaires qui pourraient être pertinentes.

Ce dernier article de la base de connaissances suppose que vous souhaitez attendre un laps de temps infini jusqu'à la fin du processus shell.

Vous pouvez modifier le paramètre ret & amp; = WaitForSingleObject (proc.hProcess, INFINITE), appel de la fonction à renvoyer après un laps de temps déterminé en millisecondes - remplacez INFINITE par une valeur positive représentant des millisecondes et enveloppez le tout dans une boucle Do While. La valeur de retour vous indique si le processus est terminé ou si la minuterie est épuisée. La valeur de retour sera zéro si le processus est terminé.

Si la valeur de retour est différente de zéro, le processus est toujours en cours d'exécution, mais le contrôle est rendu à votre application. Pendant ce temps, pendant que vous avez le contrôle positif de votre application, vous pouvez déterminer si vous souhaitez mettre à jour une sorte de statut de l'interface utilisateur, vérifier l'annulation, etc. Ou vous pouvez effectuer une boucle supplémentaire et attendre encore.

Il existe même des options supplémentaires si le programme que vous ciblez est quelque chose que vous avez écrit. Vous pouvez vous connecter à l'une de ses fenêtres et faire en sorte que le programme publie des messages que vous pouvez joindre et utiliser comme commentaires d'état. Il vaut probablement mieux laisser cela à un autre article si vous devez le prendre en compte.

Vous pouvez utiliser la structure de processus pour obtenir une valeur de retour du processus appelé. Votre processus doit renvoyer une valeur pour que cela soit utile.

Mon approche générale face à ce type de besoin consiste à:

  1. donne à l'utilisateur une boîte de dialogue d'état non modale au début du processus avec un bouton d'annulation, qui, une fois cliqué dessus, définira un indicateur à vérifier ultérieurement. Il est fort probablement impossible de fournir un statut quelconque à l'utilisateur. Il peut donc s'avérer utile de lui attribuer un temps écoulé ou l'un de ces GIF animés pour gérer les attentes.
  2. Démarrer le processus
  3. Attendez la fin du processus, ce qui permet de vérifier l'annulation toutes les 500 ms
  4. Si le processus est terminé, fermez la boîte de dialogue et continuez.
  5. Si le processus n'est pas terminé, voyez si l'utilisateur a appuyé sur annuler et, le cas échéant, envoyez un message de fermeture à la fenêtre du processus. Cela peut ne pas fonctionner et il peut être nécessaire de mettre fin au processus - soyez prudent si vous procédez ainsi. Votre meilleur choix peut être d'abandonner le processus s'il ne se ferme pas correctement. Vous pouvez également rechercher un délai d'expiration à ce stade et essayer de suivre le même chemin que si l'utilisateur appuyait sur annuler.

J'espère que ça aide, Bill.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top