Python Code über Excel (VBA) starten (Komisches Problem)

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Elias_HH
User
Beiträge: 7
Registriert: Mittwoch 20. Mai 2020, 22:21

Hallo liebe Community,

ich habe ein ganz komisches Problem. Ich fange mal einfach an. Ich möchte einen sehr einfachen Python Code über VBA starten. Auf meiner Recherche bin ich in sehr vielen Videos und Beiträgen auf den folgenden VBA-Skript gestoßen:

Code: Alles auswählen

Sub RunPythonScript()

Dim objShell As Object
Dim PythonExePath, PythonScriptPath As String

    Set objShell = VBA.CreateObject("Wscript.Shell")
    
    'PythonExePath = """ Insert Path to Python EXE here """
    'PythonScriptPath = " Insert Path to Python SCRIPT here "
    
    objShell.Run PythonExePath & PythonScriptPath

End Sub
Anschließend erstelle ich auf der Tabelle ein Button und weise ihm den erstellen Makro zu, sodass nach dem Klick das Makro gestartet und folglich das Python Skript. Mein Skript enthält lediglich folgende Zeile, um einfach zu sehen, ob es den überhaupt klappt und er eine Textdatei erstellt:

Code: Alles auswählen

f = open("demofile2.txt", "w")
Jetzt kommt das komische. Es klappt ! Doch sobald ich die Excel schließe und dann wieder öffne funktioniert der Aufruf des Skriptes nicht mehr, sprich: es wird keine .txt-Datei erstellt, obwohl ich nichts geändert habe. Kennt jemand dieses Problem ?
Zuletzt geändert von Elias_HH am Mittwoch 14. Oktober 2020, 11:33, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

"Klappt nicht" ist eine sehr schlechte Fehlerbeschreibung, da sie keine Information enthält, was denn statt dessen passiert.
Warum sind denn die Zeilen mit PythonExePath und PythonScriptPath auskommentiert?
Elias_HH
User
Beiträge: 7
Registriert: Mittwoch 20. Mai 2020, 22:21

Sirius3 hat geschrieben: Mittwoch 14. Oktober 2020, 11:25 "Klappt nicht" ist eine sehr schlechte Fehlerbeschreibung, da sie keine Information enthält, was denn statt dessen passiert.
Warum sind denn die Zeilen mit PythonExePath und PythonScriptPath auskommentiert?
Sorry, ich habe so eben korrigiert. Aber auch nochmal hier: Vorher ist es ja so, dass wenn ich auf den Button klicke, wird mir eine .txt-Datei erstellt. Doch sobald ich die Excel schließe, öffne und dann wieder auf den Button klicke wird mir keine .txt-Datei erstellt. Die Zeilen sind auskommentiert, weil das eine Vorlage ist. Dort muss man den Pfad von seinem python.exe einfügen und den Pfad wo sich die auszuführende Python-Datei befindet. Das VBA-Skript basiert auf dieses Video:

https://www.youtube.com/watch?v=MgL9IOCFZ0U
Benutzeravatar
sparrow
User
Beiträge: 4144
Registriert: Freitag 17. April 2009, 10:28

Wenn sich hier nicht zufällig mal jemand mit VBA beschäftigt hat, wird es hier wohl schwierig mit der Antwort.
Die Zeilen sind übrigens noch immer auskommentiert.
Ich denke, deutlich bessere Chancen hast du da, wo man sich mit VBA beschäftigt.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt halt in VBA debuggen, ob die Funktion überhaupt aufgerufen wird, und wenn ja, ob objShell.run eine Fehlermeldung zurückgibt.
Elias_HH
User
Beiträge: 7
Registriert: Mittwoch 20. Mai 2020, 22:21

Sirius3 hat geschrieben: Mittwoch 14. Oktober 2020, 11:59 Du mußt halt in VBA debuggen, ob die Funktion überhaupt aufgerufen wird, und wenn ja, ob objShell.run eine Fehlermeldung zurückgibt.
Die Funktion wird ja aufgerufen, es klappt alles wunderbar. Doch sobald ich die Excel schließe und neu öffne, dann klappt es nicht mehr.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja, aber was passiert, wenn es nicht mehr klappt? Klappt es dann nicht mehr, dass die Funktion aufgerufen wird, oder klappt es nicht mehr, dass das Skript gestartet wird, oder klappt es nicht mehr, dass die Datei geschrieben wird.
Joerg-H
User
Beiträge: 1
Registriert: Mittwoch 5. Mai 2021, 09:58
Wohnort: Hannover
Kontaktdaten:

Hallo,

falls es noch jemanden interessiert: Ich hatte genau das gleiche Problem wie Elias_HH. Das Shell-Startverzeichnis war unterschiedlich und das Python-Programm konnte eine Input-Datei nicht finden. Python-Code geändert und jetzt funktioniert der Aufruf via Excel/VBA, egal ob die Excel-Datei neu erstellt, unter einem anderen Namen gespeichert oder "nur" geöffnet wurde.
Antworten