Запуск скрипта Python из VBA, проверка, работает ли команда «RetVal = Shell» - PullRequest
2 голосов
/ 11 октября 2019

Исходный вопрос

Когда я захожу в C: \ Users \ HP \ Documents \ Python Scripts и нажимаю EbayWebScraper.py, скрипт запускается. Это занимает около 30 секунд, но вывод правильный.

Я хочу запустить этот скрипт из Excel / VBA. Я попытался использовать код «RetVal = Shell» и написать его 6 разными способами. После 6 неудачных попыток я превратил код в комментарии.

Sub Python()

'RetVal = Shell("python.exe C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py", vbNormalFocus)


'RetVal = Shell("C:\Users\HP\AppData\Local\Programs\Python\Python37-32\python.exe " & "C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py")

'RetVal = Shell("C:\Users\HP\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py")

'RetVal = Shell("C:\Users\HP\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py", vbNormalFocus)


'RetVal = Shell("python.exe" & "C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py", vbNormalFocus)

'RetVal = Shell("python.exe" & "C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py")


End Sub

Нужно ли как-то замедлять макрос VBA? Действительно ли макрос VBA работает слишком быстро и не дает скрипту Python достаточно времени?

Я прочитал Макрос VBA работает слишком быстро и экспериментировал с

Application Wait (Now + TimeValue (0:00:10")).

К сожалению, эксперимент не сработал.

Я использую Loomчтобы записать экран, а затем воспроизвести запись и лучше посмотреть на любые сообщения об ошибках, которые появляются в CMD. К сожалению, насколько мне известно, каждое сообщение об ошибке, которое я получил, теперь исправлено.

Обновление 1

Я не знаю, действительно ли я глуп. Насколько я знаю, я предоставил правильный каталог файлов. Ссылка «Каталог файлов Windows Explorer» предназначена для скриншота, который я взял.

Microsoft Windows [Version 10.0.17134.165]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\HP>python C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py
python: can't open file 'C:\Users\HP\Documents\Python': [Errno 2] No such file or directory
>

Каталог файлов Windows Explorer

Обновление 2

Это также не удалось.

Microsoft Windows [Version 10.0.17134.165]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\HP>Documents\Python Scripts\EbayWebScraper.py
'Documents\Python' is not recognized as an internal or external command,
operable program or batch file.

Обновление 3

Когда я запускаю этот код (полученный от Подождите, пока завершится работа Shell, затем отформатируйте ячейки - синхронно выполните команду) -

Sub Python2()

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim errorCode As Long

errorCode = wsh.Run("C:\Users\HP\Documents\Python Scripts\EbayWebScraper.py", windowStyle, waitOnReturn)

If errorCode = 0 Then
    MsgBox "Done! No error to report."
Else
    MsgBox "Program exited with error code " & errorCode & "."
End If

End Sub

Я получил ошибку -

Ошибка времени выполнения '-2147024894 (80070002)': метод «Выполнение» объекта «IWshShell3» завершился ошибкой

Обновление 4

Я смотрю на Ошибка при запуске объекта / команд оболочки через Excel VBA .

Обновление 5

Этот код наконец заработал (я получил код по ссылке в обновлении 4).

    Sub Python3()

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim errorCode As Long

errorCode = wsh.Run(Chr(34) & "C:\Users\HP\Documents\Python Scripts" & "\EbayWebScraper.py" & Chr(34))

If errorCode = 0 Then
    MsgBox "Done! No error to report."
Else
    MsgBox "Program exited with error code " & errorCode & "."
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...