Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Probleme mit Shell Befehl

Forumthread: VBA Probleme mit Shell Befehl

VBA Probleme mit Shell Befehl
11.01.2019 23:22:21
Daniel
Hallo Forum,
erstmal vorab:
Das ist mein erster Beitrag in diesem tollen Forum.
Viele meiner Fragen konnten bereits geklärt werden. Dafür erstmal Danke!!
Jetzt zu meinem Problem:
Ich möchte mit einem VBA Code ein Batch file aufrufen um mit diesem Dateien von X noch Y zu verschieben. Der Quellordner und der Zielordner sollen in einem anderen Sub festgelegt werden.
Hierzu nutze ich den folgenden Code:

Sub batch_test()
Dim Batch_Pfad As String
Dim Batch_Befehl As String
Batch_Pfad = "C:\D_PLATTE\stunden_ruekmeldungen\rueckmeldung_move.bat"
Batch_Befehl = Chr(34) & Batch_Pfad & " " & Ordner_lokal_Rueckmeldung & "*.*" & " " &  _
Ordner_NW_Rueckmeldung & Chr(34)
'Cells(10, 1).Value = Batch_Befehl
'MsgBox Batch_Befehl
Dim retVal
'retVal = Shell(Batch_Befehl)
retVal = Shell("C:\D_PLATTE\stunden_ruekmeldungen\rueckmeldung_move.bat C:\D_PLATTE\ _
stunden_ruekmeldungen\speicher_rueckmeldung_lokal\*.* C:\D_PLATTE\stunden_ruekmeldungen\ _
speicher_rueckmeldung_nw\")
End Sub

Nutze ich die Funktion Shell(Batch_Befehl) bekomme ich den Fehler:
Laufzeitfehler 53 Datei nicht gefunden
Wenn ich jedoch die Variable "Batch_Befehl" in eine Zelle schreibe und deren Inhalt dann direkt in den Shell Befehl kopiere funktioniert alles Prima!!
Ich verstehe das nicht so wirklich. Habt ihr eine Idee woran dass liegen kann?
Vielen Dank im Voraus!
Gruß
Daniel
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Probleme mit Shell Befehl
12.01.2019 00:28:53
onur
Wozu zusätzliche Gänsefüsschen (CHR(34)) vor einem String ?
Was ist
Ordner_lokal_Rueckmeldung

Ein Text oder eine Variable?
Wen Text - Wo sind die Gänsefüsschen?
Dim´s gehören an den Anfang einer Sub.
Bau am Besten ein "Stop" oder einen Haltepunkt hinter der Zeile
Batch_Befehl = ....

und lese dann Batch_Pfad und Batch_Befehl aus, dann siehst du, ob alles richtig ist.
Anzeige
AW: VBA Probleme mit Shell Befehl
12.01.2019 11:50:41
Daniel
Hallo onur,
die zusätzlichen Gänsefußche chr(34) waren das Problem.
Wusste auch nicht warum ich gestern der meinung war diese zu brauchen.
Vielen Dank!!
Gruß
Daniel
;
Anzeige
Anzeige

Infobox / Tutorial

Probleme mit dem Shell-Befehl in VBA


Schritt-für-Schritt-Anleitung

Um ein Batch-File in Excel VBA korrekt mit dem Shell-Befehl aufzurufen, befolge diese Schritte:

  1. Öffne den VBA-Editor in Excel (ALT + F11).

  2. Füge ein neues Modul hinzu:

    • Rechtsklick auf "VBA-Projekt" → Einfügen → Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub batch_test()
       Dim Batch_Pfad As String
       Dim Batch_Befehl As String
    
       Batch_Pfad = "C:\D_PLATTE\stunden_ruekmeldungen\rueckmeldung_move.bat"
       Batch_Befehl = Chr(34) & Batch_Pfad & " " & "C:\D_PLATTE\stunden_ruekmeldungen\speicher_rueckmeldung_lokal\*.*" & " " & "C:\D_PLATTE\stunden_ruekmeldungen\speicher_rueckmeldung_nw\" & Chr(34)
    
       Dim retVal As Variant
       retVal = Shell(Batch_Befehl, vbNormalFocus)
    End Sub
  4. Achte auf die Anführungszeichen: Verwende Chr(34) nur, wenn es nötig ist, um Pfade richtig zu formatieren.

  5. Führe das Makro aus und überprüfe die Ergebnisse.


Häufige Fehler und Lösungen

  • Laufzeitfehler 53: Datei nicht gefunden:

    • Stelle sicher, dass der Pfad korrekt ist und die Datei existiert. Überprüfe die Variablen und den gesamten Befehl.
  • Zusätzliche Anführungszeichen:

    • Verwende Chr(34) nur, wenn es erforderlich ist. Manchmal können falsche Gänsefüßchen den gesamten Befehl ungültig machen.
  • Variable nicht definiert:

    • Vergewissere dich, dass alle Variablen korrekt deklariert sind und den richtigen Datentyp haben.

Alternative Methoden

Eine andere Möglichkeit, ein Batch-File über VBA auszuführen, ist die Verwendung der ShellExecute-Funktion aus der Windows-API. Hier ist ein Beispiel, wie Du das machen kannst:

Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As LongPtr, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub ExecuteBatchFile()
    ShellExecute 0, "open", "C:\D_PLATTE\stunden_ruekmeldungen\rueckmeldung_move.bat", "", "", 1
End Sub

Diese Methode ist besonders nützlich, wenn Du auf Windows-Umgebungen zugreifen möchtest.


Praktische Beispiele

Hier ist ein Beispiel für einen kompletten VBA-Code, der ein Batch-File aufruft:

Sub MoveFiles()
    Dim Batch_Pfad As String
    Dim Ordner_lokal_Rueckmeldung As String
    Dim Ordner_NW_Rueckmeldung As String
    Dim Batch_Befehl As String

    Ordner_lokal_Rueckmeldung = "C:\D_PLATTE\stunden_ruekmeldungen\speicher_rueckmeldung_lokal\"
    Ordner_NW_Rueckmeldung = "C:\D_PLATTE\stunden_ruekmeldungen\speicher_rueckmeldung_nw\"
    Batch_Pfad = "C:\D_PLATTE\stunden_ruekmeldungen\rueckmeldung_move.bat"

    Batch_Befehl = Chr(34) & Batch_Pfad & Chr(34) & " " & _
                   Chr(34) & Ordner_lokal_Rueckmeldung & "*.*" & Chr(34) & " " & _
                   Chr(34) & Ordner_NW_Rueckmeldung & Chr(34)

    Dim retVal As Variant
    retVal = Shell(Batch_Befehl, vbNormalFocus)
End Sub

Dieser Code wird alle Dateien vom Quellordner in den Zielordner verschieben, solange die Batch-Datei korrekt funktioniert.


Tipps für Profis

  • Verwende vbNormalFocus im Shell-Befehl, um sicherzustellen, dass das Fenster im Vordergrund angezeigt wird.
  • Debugging: Setze Haltepunkte im Code, um die Werte von Variablen wie Batch_Befehl zu überprüfen.
  • Fehlerbehandlung: Implementiere eine einfache Fehlerbehandlung, um Laufzeitfehler abzufangen.

FAQ: Häufige Fragen

1. Warum funktioniert mein Shell-Befehl nicht? Stelle sicher, dass der Pfad zur Datei korrekt ist und dass Du die richtigen Anführungszeichen verwendest.

2. Was ist der Unterschied zwischen Shell und ShellExecute? Shell führt das Programm im Hintergrund aus, während ShellExecute das Programm in einem neuen Fenster öffnet.

3. Kann ich den Shell-Befehl auch für andere Dateitypen verwenden? Ja, der Shell-Befehl kann verwendet werden, um verschiedene Arten von Dateien auszuführen, nicht nur Batch-Dateien.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige