【问题标题】:How to get username in VBA?如何在 VBA 中获取用户名?
【发布时间】: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 代码相同的目录中?然后,您将拥有一份由您控制的解释器。你知道每个人都在使用正确的版本。这也简化了部署。

标签: excel vba


【解决方案1】:

我会使用环境变量:

full_id = "C:\Users\" & Environ("username") & "\anaconda3\python.exe"

full_id = Environ("userprofile") & "\anaconda3\python.exe"

/e:正如 Zack 在 cmets 中所建议的,“%UserProfile%\anaconda3\python.exe”也是一个好主意!

【讨论】:

  • 请致电Environ("userprofile"),我经常忘记它的存在!
  • 我使用 Environ("USERNAME")
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 2014-11-10
  • 2012-01-04
  • 2013-11-28
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多