我一直在努力寻找解决这个问题的方法。我有一些python脚本需要定期更新,并希望能够使用宏来完成此任务。现在我双击文件,它们通过Shell执行没有问题。
Sub RunPyScript()
Dim Ret_Val As Variant
Dim command As String
command = Chr(34) & "C:\Users\Jon Doe\python.exe" & Chr(34) & " " & Chr(34) & "C:\Users\Jon Doe\" & "\Roto.py" & Chr(34)
Ret_Val = Shell(command, vbNormalFocus)
End Sub
当我尝试运行上面的宏时,看起来它的运行方式与双击时相同,但Shell在执行脚本之前退出(我认为这是问题,而不是正面)。如果有人能帮助我,我真的很感激。
答案 0 :(得分:6)
Dim objShell
Dim command as String 'use this declaration type for VBA (Access/Excel)
'Dim command 'use this declaration type for VBS (Script), instead of the direct declaration like as "As String"
command = Chr(34) & "C:\Users\John Doe\python.exe" & Chr(34) & " " & Chr(34) & "C:\Users\John Doe\" & "\roto.py" & Chr(34)
Set objShell = CreateObject("WScript.Shell")
objShell.Run command, 1, True
'Settings for WindowStyle:
' 0 Hide the window (and activate another window.)
' 1 Activate and display the window. (restore size and position) Specify this flag when displaying a window for the first time.
' 2 Activate & minimize.
' 3 Activate & maximize.
' 4 Restore. The active window remains active.
' 5 Activate & Restore.
' 6 Minimize & activate the next top-level window in the Z order.
' *** 7 Minimize. The active window remains active.
' 8 Display the window in its current state. The active window remains active.
' 9 Restore & Activate. Specify this flag when restoring a minimized window.
' 10 Sets the show-state based on the state of the program that started the application.
顺便说一下,您可以简单地使用2x引号将引号插入到字符串变量中,就像我在之前的源代码中使用它们一样。例如StrVariable=""""
给出结果"
。那么命令行的字符串将是:
command = """%USERPROFILE%\python.exe"" ""%USERPROFILE%\roto.py"""
结果是:
"C:\Users\John Doe\python.exe" "C:\Users\John Doe\roto.py"