Externes Programm starten und Ablauf abwarten

Hallo Experten,

ich habe ein Excel-Makro geschrieben, indem aus einer Datentabelle bestimmte Werte ausgelesen und als .txt Datei gespeichert werden. Mit „shell“ ruft nun das Makro ein Microsoft-unabhängiges externes Programm auf, welches die txt-Datei liest und entsprechende Berechnungen durchführt. Die Ergebnisse werden dann wieder in einer anderen txt-Datei gespeichert und sollen von Excel anschließend wieder gelesen werden.

Nun zum Problem. Das externe Programm benötigt je nach Schnelligkeit des Rechners 10-12 Sekunden. Nun soll Excel so lange warten, bis das andere Programm fertig ist und die Ergebnis-Datei geschlossen hat. Ich habe zur Zeit eine Warteschleife von 15 Sekunden eingebaut und es funktioniert; aber nur auf meinem oder anderen schnellen Rechnern. Wenn das Programm woanders, z.B auf einem langsameren Rechner läuft, treten Fehlermeldungen auf, weil die Datei noch von dem externen Programm beschrieben wird.

Frage: Wie programmiert man das Makro, so dass es die Ausführung des externen Programms abwartet und erst dann die nächste Anweisung bearbeitet. Wenn ich mich Schrittweise durch das Makro debugge (mit F8) funktioniert es ja auch.

Fragt grüßend,
Marc

Mein Lösungsansatz wäre folgender:

Baue auf mit „On error goto“ auf die Fehlermeldung auf.
Tritt kein Fehler auf, wird das Makro durchlaufen und das ausgeführt, was ausgeführt werden soll.

Tritt ein Fehler auf wird die Routine beendet (und die Schleife neu gestartet), wobei du auch auf die Art des Fehler reagieren kannst (Datei existiert nicht, ist von anderem PRG geöffnet, etc.).

Eine kleine Fußangel:
Die Routine muß, wenn regulär durchlaufen, vorzeitig beendet werden, da Du sonst trotz Ausführung in den „goto“-Pfad rennst. - Optional, aber IMHO nicht so sauber, kannst du im goto-Pfad „IF ERR 0“ einbauen und die Anweisungen für den Fehlerfall in den Ja-Pfad schreiben; der Nein-Pfad (else) bliebe demnach leer.
Aber wie gesagt: Das letztere halte ich für unsauber.

HTH, Michael

Hallo Marc!

Guckst Du am besten hier: http://www.activevb.de/tipps/vb6tipps/tipp0148.html

Gruß, Manfred