我有一个调用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
Run Code Online (Sandbox Code Playgroud)
但是,此代码很快将被分发,因此用户名“ 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
Run Code Online (Sandbox Code Playgroud)
但是,这导致Ret_val的最后一行出现错误,因为我对VBA真的很陌生,所以我只使用了Python中的逻辑。任何帮助都非常感谢:)
我会使用环境变量:
full_id = "C:\Users\" & Environ("username") & "\anaconda3\python.exe"
Run Code Online (Sandbox Code Playgroud)
要么
full_id = Environ("userprofile") & "\anaconda3\python.exe"
Run Code Online (Sandbox Code Playgroud)
/ e:正如Zack在评论中建议的那样,“%UserProfile%\ anaconda3 \ python.exe”也是个好主意!