运行 Python 脚本通过 Excel VBA
Run Python script through Excel VBA
我在 运行 从 Excel VBA 中创建 python 脚本时遇到问题。这是 VBA 代码:
Sub RunPython()
Dim objShell As Object
Dim PythonExe, PythonScript As String
Set objShell = VBA.CreateObject("Wscript.Shell")
PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
objShell.Run PythonExe & PythonScript
End Sub
python代码如下。
print("hello")
input("hello, press enter")
当我 运行 VBA 时,python 执行器打开但它立即关闭而没有实际执行脚本。也就是说,"hello"
和"hello, press enter"
都没有出现在python执行器window上,突然关闭
我确定 python.exe 和 python 脚本的路径是正确的。我用 """"
和 ""
都试过了,但在这两种情况下都不起作用。显然(超级简单!)如果我直接从 python 执行器运行 python 脚本工作。
您可能需要 PythonExe & " " & PythonScript
之间的 space。因此,您 运行 的命令是 "C:\…\python3.exe" "C:\…\BlackBoxAbsorbers.py"
,在程序路径和 python 脚本之间带有 space。
另请注意 Dim PythonExe, PythonScript As String
仅声明 PythonScript As String
但 PythonExe As Variant
。在 VBA 中,您需要为 每个 变量指定一个类型:Dim PythonExe As String, PythonScript As String
或者默认为 Variant
!
此外 objShell.Run PythonExe & PythonScript
无法正确调试。我建议将命令放入一个变量中,这样您就可以立即打印它 window 以进行调试:
Dim Command As String
Command = PythonExe & PythonScript
Debug.Print Command
objShell.Run Command
如果执行此操作,您将看到命令的输出为:
"C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe""C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"
并且两个字符串之间没有 space,实际上应该是:
"C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe" "C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"
所以我推荐:
Public Sub RunPython()
Dim objShell As Object
Set objShell = VBA.CreateObject("Wscript.Shell")
Dim PythonExe As String
PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
Dim PythonScript As String
PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
Dim Command As String
Command = PythonExe & " " & PythonScript
objShell.Run Command
End Sub
已解决!!我不明白为什么,但是拆分 objShell.Run PythonExe 和 objShell.Run PythonScript 它工作正常!像这样:
Public Sub RunPython()
Dim objShell As Object
Set objShell = VBA.CreateObject("Wscript.Shell")
Dim PythonExe As String
PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
Dim PythonScript As String
PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
objShell.Run PythonExe
objShell.Run PythonScript
End Sub
无论如何谢谢@Pᴇʜ,我会给你的回答好评,因为你一直很友善!
我在 运行 从 Excel VBA 中创建 python 脚本时遇到问题。这是 VBA 代码:
Sub RunPython()
Dim objShell As Object
Dim PythonExe, PythonScript As String
Set objShell = VBA.CreateObject("Wscript.Shell")
PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
objShell.Run PythonExe & PythonScript
End Sub
python代码如下。
print("hello")
input("hello, press enter")
当我 运行 VBA 时,python 执行器打开但它立即关闭而没有实际执行脚本。也就是说,"hello"
和"hello, press enter"
都没有出现在python执行器window上,突然关闭
我确定 python.exe 和 python 脚本的路径是正确的。我用 """"
和 ""
都试过了,但在这两种情况下都不起作用。显然(超级简单!)如果我直接从 python 执行器运行 python 脚本工作。
您可能需要 PythonExe & " " & PythonScript
之间的 space。因此,您 运行 的命令是 "C:\…\python3.exe" "C:\…\BlackBoxAbsorbers.py"
,在程序路径和 python 脚本之间带有 space。
另请注意 Dim PythonExe, PythonScript As String
仅声明 PythonScript As String
但 PythonExe As Variant
。在 VBA 中,您需要为 每个 变量指定一个类型:Dim PythonExe As String, PythonScript As String
或者默认为 Variant
!
此外 objShell.Run PythonExe & PythonScript
无法正确调试。我建议将命令放入一个变量中,这样您就可以立即打印它 window 以进行调试:
Dim Command As String
Command = PythonExe & PythonScript
Debug.Print Command
objShell.Run Command
如果执行此操作,您将看到命令的输出为:
"C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe""C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"
并且两个字符串之间没有 space,实际上应该是:
"C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe" "C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"
所以我推荐:
Public Sub RunPython()
Dim objShell As Object
Set objShell = VBA.CreateObject("Wscript.Shell")
Dim PythonExe As String
PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
Dim PythonScript As String
PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
Dim Command As String
Command = PythonExe & " " & PythonScript
objShell.Run Command
End Sub
已解决!!我不明白为什么,但是拆分 objShell.Run PythonExe 和 objShell.Run PythonScript 它工作正常!像这样:
Public Sub RunPython()
Dim objShell As Object
Set objShell = VBA.CreateObject("Wscript.Shell")
Dim PythonExe As String
PythonExe = """C:\Users\carlo\AppData\Local\Microsoft\WindowsApps\python3.exe"""
Dim PythonScript As String
PythonScript = """C:\Users\carlo\Desktop\MSc_Thesis\ML applications\BlackBox\BlackBoxAbsorbers.py"""
objShell.Run PythonExe
objShell.Run PythonScript
End Sub
无论如何谢谢@Pᴇʜ,我会给你的回答好评,因为你一直很友善!