2013-08-08 38 views
17

próbuje wywołać skrypt Pythona na Vba i jestem newb. Próbowałem przekonwertować główny skrypt na exe za pomocą py2exe, a następnie wywołując go z VBA (powłoki), ale główny skrypt wywołuje inne skrypty, dlatego staje się skomplikowany i pomieszałem go (mój exe nie działa). Poza tym głównym skryptem jest duży plik i nie chcę go zbyt często poprawiać.Jak wywołać skrypt Pythona na excel vba?

Bottomline, czy istnieje sposób na wywołanie głównego skryptu z programu excel vba, bez konwersji skryptu do pliku exe.

Do tej pory próbowałem:

RetVal = Shell("C:\python27\python.exe " & "import " & "C:\\" & "MainScriptFile") 

Zaczyna python.exe ale nie robi nic innego. Następnie próbowałem:

RetVal = Shell("C:\Windows\System32\cmd.exe " & "python " & "C:\\Python27\\hello.py") 

Uruchamia wiersz polecenia, ale nawet nie uruchamia pythona.

P.S. Sprawdziłem wszystkie powiązane pytania na forum, nie rozwiązują mojego problemu.

Odpowiedz

14

Spróbuj tego:

RetVal = Shell("<full path to python.exe> " & "<full path to your python script>") 

Albo jeśli skrypt python jest w tym samym folderze co skoroszytu, to można spróbować:

RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "\<python script name>") 

Wszystkie dane w obrębie <> mają być podane. <> - wskazuje zmienne pola

Myślę, że to powinno działać. Ale znowu, jeśli twój skrypt ma wywoływać inne pliki, które znajdują się w różnych folderach, może powodować błędy, chyba że twój skrypt poprawnie go obsłużył. Mam nadzieję, że to pomoże.

+0

ja już próbował je. Uruchamia interpreter python, ale nie robi nic innego. Wierzę, że "shell" uruchamia tylko pliki exe i nie pozwala mi uruchomić skryptu. –

+3

Niestety, nie wiem, co wcześniej zrobiłem źle. Teraz zadziałało. Wielkie dzięki! Użyłem: RetVal = Shell ("C: \ python27 \ python.exe C: \ Python27 \ CallOptimizer.py") –

+0

@EgeOzlem Czy mógłbyś udostępnić próbkę skryptu Pythona, który wykonałeś z VBA? i co powrócił do połączenia VBA? – ggupta

4

Istnieje kilka sposobów, aby rozwiązać ten problem

Pyinx - dość lekkie narzędzie, które pozwala zadzwonić Python od withing przestrzeń proces programu Excel http://code.google.com/p/pyinex/

Używałem ten kilka lat temu (z powrotem, kiedy została ona aktywnie rozwijana) i to działało całkiem dobrze

Jeśli nie masz nic przeciwko, to wygląda całkiem nieźle

https://datanitro.com/product.html

nigdy nie użył go choć


Chociaż jeśli już pisanie w Pythonie, może można upuścić excel całkowicie i zrobić wszystko, co w czystym Pythonie? O wiele łatwiej jest utrzymywać jedną bazę kodu (python) niż 2 (python + dowolna nakładka programu Excel).

Jeśli naprawdę chcesz wyprowadzić swoje dane do programu Excel, w Pythonie znajdziesz nawet całkiem dobre narzędzia. Jeśli to może działać lepiej, daj mi znać, a ja dostanę linki.

+0

Dzięki za sugestie. Nie mogę całkowicie zwolnić programu excel, ponieważ ten projekt jest czasochłonny, kod Pythona został opracowany przez kogoś innego i muszę opracować prosty interfejs dla tego kodu i nie mam doświadczenia w Pythonie. Najlepszym sposobem dla mnie jest używanie VBA. Być może w przyszłości mogę to rozważyć. W każdym razie dzięki. –

+0

Mogę polecić DataNitro. Doskonała integracja. Nieco kosztowny, ale – Joop

1

Możesz również wypróbować ExcelPython, który pozwala na manipulowanie obiektem i kodem wywołania Pythona z VBA.

-1

Spróbuj tego:

retVal = Shell("python.exe <full path to your python script>", vbNormalFocus) 

zastąpić <full path to your python script> z pełną ścieżką

+0

powinien powiedzieć RetVal = Shell ("python.exe ", vbNormalFocus) i zastąpić pełną ścieżką do twojego skryptu. –