Batch starten und warten in Excel
Schritt-für-Schritt-Anleitung
Um eine Batch-Datei von Excel aus zu starten und zu warten, bis sie abgeschlossen ist, kannst du den folgenden VBA-Code verwenden. Dieser Code ruft die Batch-Datei auf und zeigt eine Messagebox an, wenn der Prozess beendet ist.
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.
- Kopiere und füge den folgenden Code in das Modul ein:
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" _
(ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, _
ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Function ExecCmd(cmdline As String)
Dim proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim ret As Long
Start.cb = Len(Start)
ret = CreateProcessA(vbNullString, cmdline, 0, 0, 1, 0, 0, vbNullString, Start, proc)
ret = WaitForSingleObject(proc.hProcess, INFINITE)
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
End Function
Sub test()
ExecCmd ("C:\Programme\Dyn\bin\test.bat")
MsgBox "Fertig"
End Sub
- Ersetze den Pfad
"C:\Programme\Dyn\bin\test.bat"
mit dem Pfad deiner Batch-Datei.
- Schließe den VBA-Editor und führe das Makro
test
aus.
Dieser Code wartet, bis die Batch-Datei abgeschlossen ist, bevor die Messagebox angezeigt wird.
Häufige Fehler und Lösungen
Alternative Methoden
Eine alternative Methode, um eine Batch-Datei in Excel auszuführen, könnte die Verwendung von Shell
sein. Der folgende Code zeigt, wie du die Shell
-Methode nutzen kannst, um die Batch-Datei zu starten.
Sub RunBatch()
Dim returnValue As Double
returnValue = Shell("C:\Programme\Dyn\bin\test.bat", vbNormalFocus)
MsgBox "Batch gestartet! Rückgabewert: " & returnValue
End Sub
Beachte, dass diese Methode nicht auf das Ende der Batch-Datei wartet.
Praktische Beispiele
Hier sind einige praktische Beispiele, wie du Batch-Dateien aus Excel starten kannst:
-
Batch warten 5 Sekunden:
Du kannst eine Pause in deine Batch-Datei einfügen, um den Prozess zu verlangsamen.
@echo off
timeout /t 5
echo "5 Sekunden warten..."
-
CMD-Befehle in einer Batch-Datei:
Du kannst auch CMD-Befehle direkt in der Batch-Datei verwenden, um verschiedene Aufgaben zu erledigen.
@echo off
dir C:\
pause
Tipps für Profis
- Verwendung von Variablen: Du kannst Variablen in deiner Batch-Datei verwenden, um dynamische Werte zu setzen.
- Batch-Messagebox erstellen: Du kannst ein VBS-Skript aus der Batch-Datei aufrufen, um eine Messagebox anzuzeigen, wenn der Prozess abgeschlossen ist.
@echo off
echo "Task abgeschlossen!"
start /wait wscript.exe "C:\Pfad\zu\deinem\script.vbs"
- Batch warten: Wenn du mehrere Batch-Dateien nacheinander ausführen möchtest, kannst du die
start /wait
-Option verwenden.
FAQ: Häufige Fragen
1. Wie lange kann ich eine Batch-Datei warten?
Du kannst die Zeit in der Batch-Datei selbst mit timeout
angeben, um zum Beispiel 5 Sekunden zu warten.
2. Kann ich auch Parameter an die Batch-Datei übergeben?
Ja, du kannst Parameter direkt beim Aufruf der Batch-Datei in der ExecCmd
-Funktion übergeben. Zum Beispiel: ExecCmd ("C:\Programme\Dyn\bin\test.bat Parameter1 Parameter2")
.
3. Funktioniert das auf allen Excel-Versionen?
Ja, dieser Code sollte in Excel 2010 und späteren Versionen funktionieren, solange VBA unterstützt wird.