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

Forumthread: WShell schließt sofort nach Ausführung

WShell schließt sofort nach Ausführung
14.07.2019 01:21:26
Marc
Hallo zusammen,
ich möchte mit VBA ein Python Skript ausführen über eine Shell. Dabei soll zunächst Python.exe gestartet werden und dann das Python Skript indem der eigentliche Code steht.
Doch die Shell geht nur kurz auf und schließt sich sofort wieder ohne das noch irgendetwas _
geschieht. Das Python Skript wird nicht ausgeführt. Es würde eine Datei erstellen und ich weiß, _
dass es zuverlässig läuft. Von daher kann ich sicher sagen, dass es nicht ausgeführt wird.
Sub RunPython()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\ _
Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\Dividendenbewertung\DivTool 1.5 - CSV Scraper.py & x"
End Sub
Was kann ich tun damit das Python Skript ausgeführt wird?
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 07:35:32
ChrisL
Hi Marc
Die Dateiendung py & x ist komisch.
..pyx"
..py"
..py" & "x"
wenn es eine String-Variable wäre
..py" & x
cu
Chris
AW: WShell schließt sofort nach Ausführung
14.07.2019 09:24:08
Marc
Hallo Chris,
sorry, ich hatte das Argument x nicht mit rausgenommen für den Thread. x ist ein String. Aber auch wenn ich diesen entsprechend Deiner Vorgabe angebe in der Zeile ändert sich nichts am Ergebnis. Die Shell schließt ohne den Python Code auszuführen, aber auch ohne Fehlermeldung.
Sub getsoup()
Dim x As String
x = "Hallo Welt!"
CreateObject("WScript.Shell").Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\ _
Python37-32\python.exe C:\Users\Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\Dividendenbewertung\DivTool 1.5 - CSV Scraper.py" & x, 1, True
MsgBox "ende"
End Sub

Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 11:04:59
Marc
Update:
Wenn ich den Code folgendermaßen ausführe dann öffnet sich schonmal die Eingabeaufforderung von Python(ich nehme an, dass diese die Shell darstellt), wo dann eigentlich automatisch der Pfad zum auszuführenden Skript eingefügt werden müsste aber das passiert leider nicht:

Sub getsoup()
Dim x As String
x = "Hallo Welt!"
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe"
End Sub


Meine Syntax beim vorherigen Aufruf scheint nicht korrekt zu sein. Weiß jemand wie diese aussehen muss damit der Pfad zum Pythonskript eingefügt und ausgeführt wird?
Alternativ könnte man das Ganze vielleicht auch mit einem zweiten Aufruf machen aber ich weiß nicht mit welcher Methode der Shell ich dabei arbeiten muss.
Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 11:26:38
Marc
Update:
Nun habe ich es versucht indem ich für die Python Eingabeaufforderung ein weiteres Objekt erstelle (PythonShell) um mit diesem über einen separaten Aufruf das Python Skript auszuführen:

Sub getsoup()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim PythonShell As Object
Set PythonShell = wsh.Run("C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\ _
python.exe")
PythonShell.Exec "C:\Users\Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\ _
Dividendenbewertung\DivTool 1.5 - CSV Scraper.py"
End Sub

Als Fehlermeldung erhalte ich "Objekt erforderlich", bezogen auf die Codezeile in der ich das Objekt instanzieren möchte.
Hat irgendwer einen Lösungsansatz wie ich eine Commandozeile in die Python Eingabeaufforderung bekomme und diese ausführen kann?
Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 12:22:16
onur
Es KÖNNTE an den Leerzeichen im Namen des Scripts liegen.
AW: WShell schließt sofort nach Ausführung
14.07.2019 12:52:31
Marc
Hallo Onur,
lange nicht gelesen. ;)
Es waren tatsächlich die Leerzeichen. Jetzt läuft´s.
Vielen Dank für den guten Tipp!
AW: WShell schließt sofort nach Ausführung
14.07.2019 13:04:11
Marc
Zum Abschluss nochmal den korrekten Code, denn die Übergabe der Argumente erfolgt doch innerhalb der Gänsefüßchen:
Sub getsoup()
Dim x As String
x = "Hallo Welt!"
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\ _
Public\Geldanlage\Pivots\Dividendenbewertung\Scraper.py & x", 1, True
End Sub

Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 13:05:18
onur
Die meisten Command-Line-Interpreter interpretieren Leerzeichen als Beginn eines neuen Befehls bzw Start der Parameter.
Abgesehen davon sollte man prinzipiell Leerzeichen in Namen vermeiden, bringen in vielen Fällen Probleme mit sich.
AW: WShell schließt sofort nach Ausführung
15.07.2019 23:36:11
Marc
Der vorherige Code überträgt nur den Bezeichner aber nicht den Wert der Variable, deshalb im Folgenden nochmal die korrekte Variante um den Wert einer Variable (in diesem Fall String) zu übergeben:
Sub ArgumenteÜbergeben()
Dim x As String
x = "Hallo Welt!"
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run ("C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\ _
Public\Geldanlage\Pivots\Dividendenbewertung\Scraper.py '" & x & "'")
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

WShell schließt sofort nach Ausführung eines Python-Skripts


Schritt-für-Schritt-Anleitung

Um ein Python-Skript aus VBA heraus auszuführen, kannst du den WScript.Shell-Objekt verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“.
    • Wähle „Einfügen“ > „Modul“.
  3. Füge folgenden VBA-Code ein:

    Sub RunPythonScript()
       Dim wsh As Object
       Set wsh = VBA.CreateObject("WScript.Shell")
       wsh.Run "C:\Users\DeinBenutzername\AppData\Local\Programs\Python\Python37\python.exe C:\Pfad\zu\deinem\Script.py"
    End Sub
  4. Ersetze den Pfad zu deiner Python-Installation und dem Skript mit dem korrekten Pfad.

  5. Führe das Skript aus, indem du im VBA-Editor auf „Ausführen“ (F5) klickst.


Häufige Fehler und Lösungen

Hier sind einige häufige Probleme, die beim Ausführen eines .py-Skripts über VBA auftreten können:

  • WShell schließt sofort: Dies kann daran liegen, dass der Pfad zum Skript nicht korrekt ist oder Leerzeichen im Dateinamen nicht richtig behandelt werden. Stelle sicher, dass der gesamte Pfad in Anführungszeichen gesetzt ist.

  • Fehlermeldung „Objekt erforderlich“: Dies passiert oft, wenn die Syntax nicht korrekt ist. Verwende wsh.Exec anstelle von wsh.Run, um das Skript korrekt auszuführen.

  • Python-Skript wird nicht gefunden: Überprüfe, ob der Pfad zur Python-Installation und die .py-Datei korrekt sind.


Alternative Methoden

Wenn du Schwierigkeiten hast, ein Python-Skript über VBA auszuführen, gibt es auch alternative Methoden:

  1. Verwendung von Shell: Du kannst die Shell-Funktion verwenden, um einen Prozess zu starten.

    Shell "C:\Users\DeinBenutzername\AppData\Local\Programs\Python\Python37\python.exe C:\Pfad\zu\deinem\Script.py"
  2. Python in EXE umwandeln: Du kannst das Python-Skript in eine ausführbare Datei umwandeln (z.B. mit PyInstaller). Dies ermöglicht es dir, das .exe-File direkt auszuführen.

  3. Python über die Eingabeaufforderung: Du kannst das Skript auch direkt über die Windows-Eingabeaufforderung starten.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, Python-Skripte effizient aus Excel auszuführen:

  1. Ein einfaches Python-Skript ausführen:

    Sub SimplePythonRun()
       Dim wsh As Object
       Set wsh = VBA.CreateObject("WScript.Shell")
       wsh.Run """C:\Users\DeinBenutzername\AppData\Local\Programs\Python\Python37\python.exe"" ""C:\Pfad\zu\deinem\Script.py"""
    End Sub
  2. Argumente an ein Python-Skript übergeben:

    Sub RunPythonWithArgs()
       Dim wsh As Object
       Dim args As String
       args = "Argument1 Argument2"
       Set wsh = VBA.CreateObject("WScript.Shell")
       wsh.Run """C:\Users\DeinBenutzername\AppData\Local\Programs\Python\Python37\python.exe"" ""C:\Pfad\zu\deinem\Script.py"" " & args
    End Sub

Tipps für Profis

  • Verwende immer Anführungszeichen: Wenn dein Dateipfad Leerzeichen enthält, stelle sicher, dass du den gesamten Pfad in Anführungszeichen setzt.

  • Fehlerprotokollierung: Füge eine Fehlerprotokollierung in dein Python-Skript ein, um festzustellen, ob es während der Ausführung Probleme gibt.

  • Umgebungsvariablen: Stelle sicher, dass die Umgebungsvariablen für Python korrekt gesetzt sind, damit du python von jeder Eingabeaufforderung aus aufrufen kannst.


FAQ: Häufige Fragen

1. Wie kann ich eine .py-Datei über Excel ausführen? Du kannst die WScript.Shell-Objekt in VBA verwenden, um ein Python-Skript auszuführen, indem du den vollständigen Pfad zur Python-Installation und zur .py-Datei angibst.

2. Was mache ich, wenn die Shell sich sofort schließt? Stelle sicher, dass du den gesamten Pfad zu deiner .py-Datei in Anführungszeichen setzt und überprüfe, ob Leerzeichen in den Dateinamen korrekt behandelt werden.

3. Kann ich Python-Skripte auch ohne Excel ausführen? Ja, du kannst Python-Skripte direkt über die Windows-Eingabeaufforderung oder durch Umwandeln in eine EXE-Datei ausführen.

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