aus VBA heraus möchte ich mit Hilfe eines Shell-Objekts Python-Code ausführen. Dafür möchte ich der Shell einen Pfad übergeben, der darauf verweist wo das entsprechende Python-Skript liegt. Ich verwende dafür einen Code, den ich vor längerer Zeit mal mit Python 3.7/3.8 verwendet hatte und der damals immer einwandfrei funktioniert hat. Das war allerdings auf einem anderen Rechner muss ich dazu sagen. Mittlerweile hab ich ein Surface Book 3 und verwende Python 3.12.
Und nun will es einfach nicht klappen, den Pfad an Python zu übergeben, zumindest nicht mit der shell.exec-Methode. Das Python-Terminal öffnet sich zwar, aber es bleibt einfach leer und es passiert nichts. Mit Shell.run oder Call Shell funktioniert es hingegen, da ist dann aber das Auslesen der Rückgabewerte wieder wesentlich komplizierter als mit dem Exec-Objekt.
Ich nehme an es hat etwas mit der Syntax zu tun, vielleicht ist die Anordnung der Anführungszeichen beim Übergegeben falsch oder etwas ähnliches.
Im folgenden mein VBA-Code:
Code: Alles auswählen
Sub runPhyton()
Dim pfad As String, wsh As Object, oExec As Object
pfad = ThisWorkbook.Path & "\Test.py" 'Test.py befindet sich im selben Ordner wie das Excel-Workbook
' Shell instanzieren und Pfad zum Python-Skript (Test.py) übergeben
Set wsh = VBA.CreateObject("WScript.Shell")
Set oExec = wsh.Exec("C:\Users\xxxx\AppData\Local\Programs\Python\Python312\python.exe" & " " & pfad)
End Sub
Code: Alles auswählen
import sys
arglist = sys.argv # Übergebene Werte aus VBA
print(arglist)
input('Warten auf Eingabe...')
Beste Grüße
Marc