Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Shell .bat Pause einlegen bis durch mit on error go to?

Forumthread: Shell .bat Pause einlegen bis durch mit on error go to?

Shell .bat Pause einlegen bis durch mit on error go to?
28.06.2024 11:31:12
Frank Dreier
Hallo Leute,

ich will eigentlich "nur" dass Excel wartet bis die .bat Datei durchgearbeitet ist. Funktioniert wohl irgendwie aber ist recht kompliziert, hängt vom Windows ab usw.

Nun mein Workaround und Eure Meinung dazu:

Ich baue eine Fehlerabfrage ein und lasse Excel einfach eine Extra-Runde drehen bis der Fehler nicht mehr auftaucht.
Der Fehler ist das öffnen einer neu geschaffenen batende.txt Datei durch die .bat Datei was ich ganz am Ende der .bat Datei erst angebe. Also diese batende.txt wird erst erschaffen, wenn die .bat Datei durchgearbeitet ist.

Da Excel bis zum durcharbeiten ja keine .txt findet wird ein Error ausgelöst und lässt Excel im Code wieder und wieder zurückspringen bis eben diese .txt gefunden wird und erst dann würde Excel weiterrechnen,- so wie es sein soll.

So habe ich das vor:

On error go to fehler

Shell ("C:\test.bat") 'das ist die .bat die bis zum Ende abgearbeitet werden soll
fehler:
Application.Wait Now + TimeSerial(0, 0, 1)
Workbooks.OpenText Filename:="C:\batende.txt" 'und diese batende.txt kann Excel erst finden wenn die .bat durchgearbeitet ist, da erst dann diese batende.txt durch die .bat geschaffen wird

Range("A1:A100").copy
.....
'hier im folgenden kommt erst der Code mit dem Excel weiterarbeiten soll...


das müsste doch gehen, oder?


Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Shell .bat Pause einlegen bis durch mit on error go to?
28.06.2024 11:44:46
daniel
HI
mit Fehlern zu arbeiten ist immer schwierig.
vorallem der Fehlersprung ist für solche Aufgaben ungeignet, weil Excel nach dem Fehlersprung in den Fehlerbehandlungsmodus wechselt, in welchem dann kein weiterer Fehler passieren darf.

wenn dann so:
On Error Resume Next

Do
Application.Wait Now + TimeSerial(0, 0, 1)
err = 0
Workbooks.OpenText Filename:="C:\batende.txt"
Loop until err = 0
On Error Goto 0


wobei du mal testen solltest, ob du nicht auch mir DIR prüfen kannst, ob die Datei schon da ist:
Do while Dir("C:\batende.txt") = ""

Application.Wait Now + TimeSerial(0, 0, 1)
Loop



ich würde aber noch eine Abbruchbedingung über die Zeit mit einbauen, dh die Schleife beenden, wenn die Aktion länger dauert als erwartet. Sonst hast du eine Endlosschleife, wenn in der Batchdatei ein Fehler auftritt
MaxZeit = Now + TimeSerial(0, 1, 0)

Do while Dir("C:\batende.txt") = ""
Application.Wait Now + TimeSerial(0, 0, 1)
if Now > MaxZeit then
Msgbox "Batchablauf dauert zu lange, Abbruch."
Exit sub
end if
Loop


Gruß Daniel
Anzeige
AW: Shell .bat Pause einlegen bis durch mit on error go to?
28.06.2024 15:00:48
volti
Hallo Frank,

hier ist noch eine Idee dazu.....

Probiere es mal aus.

Code:


Private Declare PtrSafe Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As LongPtr Private Declare PtrSafe Function GetExitCodeProcess Lib "kernel32" ( _ ByVal hProcess As LongPtr, lpExitCode As Long) As Long Private Const PROCESS_QUERY_INFORMATION As Long = &H400 Private Const STILL_ACTIVE As Long = &H103 Sub StarteAnwendungUndWarte() ' Sub startet eine Anwendung und wartet auf Beendigung Dim hProcess As LongPtr, iExitcode As Long Dim sAppname As String sAppname = "D:\test.bat" hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, _ Shell(sAppname, vbMaximizedFocus)) Do GetExitCodeProcess hProcess, iExitcode DoEvents Loop While iExitcode = STILL_ACTIVE MsgBox "Das Programm '" & sAppname & "' wurde gerade beendet", vbInformation End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Shell .bat Pause einlegen bis durch mit on error go to?
28.06.2024 13:50:46
Oberschlumpf
Hi Yal,

uih uihh! Da muss man ja n ganzen Roman programmieren :-)
Mit meiner nur einzeiligen Codelösung gefällt es mir besser :-)
...mal sehen, ob es dazu vom Frank noch ne Antwort gibt...

Ciao
Thorsten
Daniel, klasse!!
28.06.2024 11:53:53
Frank Dreier
Hallo Daniel,

wie immer Weltklasse. Natürlich kann das mit On Error go To so nicht klappen. Danke für die Lösungsvorschläge! So sollte es klappen. Viele haben dieses Problem, dass die .bat nicht zu Ende ausgeführt wird und Excel dann einfach weiterarbeitet. Eine einfache Warteschleife reicht meistens nicht aus (zu ungenau), daher meine Idee.
Danke für Deine Perfektionierung. So sollte in Zukunft es immer klappen.

Vielen Dank!
Anzeige
AW: Shell .bat Pause einlegen bis durch mit on error go to?
28.06.2024 12:02:07
Oberschlumpf
Hi Frank,

oder mach es gleich richtig(er), vielleicht so:


CreateObject("WScript.Shell").Run Chr(34) & "deinpfad\deine.bat " & Chr(34), 1, True

Der Run-Befehl startet das CMD-Fenster UND WARTET mit Fortführung in deinem Code, BIS das CMD-Fenster wieder geschlossen ist.
Mit diesem Suchtext wscript run datei in Google wird dir alles zu wscript erklärt.

Ciao
Thorsten
Anzeige
Oberschlumpf: eine codezeile, wow und 0% CPU !!
30.06.2024 10:05:39
Frank Dreier
Also Daniel's Lösung ist schon mal klasse:

Shell ("C:\testbat.bat") 'in dieser muss am Ende die Kreation der wartebisende.txt Datei enthalten sein

Do While Dir("C:\wartebisende.txt") = ""
Application.Wait Now + Timeserial (0, 0 ,1)
Loop


Somit wird gewartet bis die "wartebisende.txt" wirklich im Ordner liegt (und die wird ja erst am Ende der ausführenden testbat.bat erstellt).
Das ist ein klassischer Workaround in Excel.
Nachteil: In der Loop-Funktion ist der CPU Kern zu 100% ausgelastet.

Oberschlumpf's Lösung ist das was viele suchen und zum Glück stellt Excel dieses Tool bereit:

CreateObject("WScript.Shell").Run Chr(34) & "C:\testbat.bat" & Chr(34), 1, True


Mit dieser einen Zeile wartet Excel tatsächlich bis die testbat.bat durchgelaufen ist. Ich bin begeistert!
Vorteil: Egal wie lange die testbat.bat benötigt: Excel wartet artig und verbraucht 0% CPU Power!

Vielen Dank für die Hilfen, das ist unbezahlbar!

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige