【问题标题】:Excel VBA pass arguments to Python scriptExcel VBA 将参数传递给 Python 脚本
【发布时间】:2021-09-06 14:58:49
【问题描述】:

我想从 Excel VBA 启动 Python 脚本。我有这个

Sub RunPython()

    Dim PythonExe As String, PythonScript As String, PythonArgs As String
    Dim objShell As Object
    
    PythonExe = "C:\MyProgs\Python\Python37\python.exe"
    PythonScript = "c:\scripts\Python\test.py"
    PythonArgs = "1 1"

    Set objShell = VBA.CreateObject("Wscript.Shell")
    
    objShell.Run PythonExe & " " & PythonScript
    'objShell.Run PythonExe & " " & PythonScript & " " & PythonArgs
    
End Sub

Python 脚本的编写方式可以在命令行上接受参数,或者在没有给出参数时提示用户。 第一个 objShell.run ... 起作用,它启动脚本并等待用户输入。 第二个 objShell.run ... 不起作用。外壳闪烁,就是这样。 如果我像这样直接从命令行调用python脚本

test.py 1 1

脚本有效。

那么,如何使用 VBA 将参数传递给脚本? 最终,我想从 Excel 工作表中读取两个参数并传递它们。

我读过 Pass Python Argument Through VBA

【问题讨论】:

  • 如果将参数传递给 Python 脚本,它会等待用户输入吗?脚本是否可能完成得如此之快,以至于 shell 只出现和消失?

标签: python excel vba


【解决方案1】:

我想通了。在 Python 脚本中,我从位置参数切换到可选参数。结果,我需要像这样发送参数

PythonArgs = "--arg1 1 --arg2 1"

【讨论】: