【发布时间】:2019-08-19 15:42:53
【问题描述】:
我有一个调用 Python 代码的 VBA 代码:
Sub Macro1()
Dim Ret_Val
Dim args as String
args = """F:\Asset Management\Global Equity\Better Interface new.py"""
Ret_val = Shell("C:\Users\MRay\anaconda3\python.exe" & args, vbNormalFocus)
End Sub
但是,很快此代码将被分发,因此每个用户的用户名“MRay”都会更改。出于可维护性的目的,我们希望自动执行此过程,而不是手动更改它。这是我迄今为止尝试过的:
Sub Macro1()
Dim Ret_Val
Dim args As String
Dim full_id As String
Dim user_id(0 to 2) As String
user_id(0) = "C:\Users\"
user_id(1) = Application.UserName
user_id(2) = "\anaconda3\python.exe"
full_id = Join(user_id)
args = """F:\Asset Management\Global Equity\Better Interface new.py"""
Ret_val = Shell(full_id & args, vbNormalFocus)
End Sub
但是,这会导致 Ret_val 的最后一行出现错误。我对 VBA 非常陌生,所以我只是使用了 Python 中的逻辑。非常感谢任何帮助:)
【问题讨论】:
-
不需要
Join,只需像这样连接它:Ret_val = Shell("C:\Users\" & Application.Username & "\anaconda3\python.exe" & args, vbNormalFocus)- 但您可能正在寻找Environ("username")?我不会在这里使用Application... -
你不能只用
%UserProfile%吗?例如。%UserProfile%\anaconda3\python.exe -
这要求每个用户都在预期位置安装 anacoda3 python。为什么不直接将“python.exe”复制到与您的 python 代码相同的目录中?然后,您将拥有一份由您控制的解释器。你知道每个人都在使用正确的版本。这也简化了部署。