Frage

Was ist der beste Weg, um ein externes Programm aus Excel laufen. Es könnte für einige Minuten laufen. Was ist die beste Praxis darüber, wie dies zu. Idealerweise

  1. Ein Modell Dialogfeld, das der Benutzer lassen ist, dass der Prozess ausgeführt wird.
  2. Wenn die ausführbare Datei fehlschlägt, sollte der Benutzer eine Benachrichtigung.
  3. sollte ein Timeout erzwungen werden.
  4. Eine Löschtaste im Dialogfeld sein sollte.

Aber alle Best Practices sind willkommen. Ich habe Interesse an Lösungen mit Aufruf entweder eine DLL oder eine Exe. Vorzugsweise etwas, das mit Excel '03 oder früher funktioniert, aber ich würde gerne einen Grund zu hören, als auch auf eine neuere Version zu bewegen.

War es hilfreich?

Lösung

Sie sollten diese zwei Microsoft Knowledge Base-Artikel überprüfen

Wie eine Win32-Anwendung von Visual Basic starten und

So verwenden Sie eine 32-Bit-Anwendung zu bestimmen, wann Shell-Prozess kurz

Sie geben Ihnen beide schnell den Rahmen einen Prozess zu starten und dann auf seiner Fertigstellung zu überprüfen. Jede der KB-Artikel hat einige zusätzliche Referenzen, die relevant sein können.

Dieser Support-Artikel geht davon aus, dass Sie für eine unendliche Menge an Zeit für die Shell-Prozess warten, enden sollen.

Sie können die ret ändern & = WaitForSingleObject (proc.hProcess, INFINITE) Anruffunktion nach einer endlichen Menge an Zeit in Millisekunden zurück - ersetzen INFINITE mit einem positiven Wert darstellt Millisekunden und wickeln Sie das Ganze in einer Do While-Schleife. Der Rückgabewert informiert Sie, wenn der Prozess abgeschlossen ist oder die Zeit lief aus. Der Rückgabewert wird Null sein, wenn der Prozess beendet.

Wenn der Rückgabewert ungleich Null ist dann der Prozess noch läuft, aber die Steuerung zurück zu Ihrer Anwendung gegeben. Während dieser Zeit, während Sie positive Kontrolle Ihrer Anwendung haben, können Sie bestimmen, ob irgendeine Art von UI-Status zu aktualisieren, überprüfen Sie auf Löschung, etc. Oder können Sie Schleife um wieder und etwas mehr warten.

Es gibt noch weitere Optionen, wenn das Programm, das Sie sind Beschuss ist etwas, das Sie geschrieben haben. Sie könnten in einem seiner Fenster Haken und haben das Programm Nachrichten posten, die Sie und als Statusrückmeldung verwenden anhängen können. Dies ist wahrscheinlich am besten links für einen separaten Artikel, wenn Sie es berücksichtigen müssen.

Sie können die Prozessstruktur verwenden, um einen Rückgabewert des aufgerufenen Prozess zu bekommen. Ihr Prozess braucht einen Wert zurückgeben für diese nützlich zu sein.

Mein allgemeiner Ansatz für diese Art von Notwendigkeit ist:

  1. gibt dem Benutzer einen nicht-modalen Statusdialog zu Beginn des Prozesses mit einer Taste abbrechen, die angeklickt, wenn ein Flag gesetzt wird später geprüft werden. Die Bereitstellung der Benutzer mit jedem Status wird höchstwahrscheinlich unmöglich, so sie eine verstrichene Zeit oder in einer dieser animierten GIFs geben könnte bei der Bewältigung Erwartungen hilfreich sein.
  2. Starten Sie den Vorgang
  3. für den Prozess warten zu vervollständigen, so dass alle 500ms Stornierung überprüfen
  4. Wenn der Prozess abgeschlossen ist nahe dem Dialog und weiter entlang.
  5. Wenn der Prozess nicht abgeschlossen ist, ob der Benutzer getroffen abbrechen und wenn so eine enge Nachricht an den Prozess Fenster senden. Dies kann nicht funktionieren und der Prozess beendet wird erforderlich sein - vorsichtig, wenn Sie dies tun. Ihre beste Wette kann sein, den Prozess zu verlassen, wenn sie nicht richtig schließen. Sie können auch an dieser Stelle für einen Timeout prüfen und versuchen, den gleichen Weg zu gehen, als ob der Benutzer Abbrechen getroffen.

Hope, das hilft, Bill.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top