【问题标题】:VBA Get Username on OSX (or Mac alternative to Environ("username"))VBA 在 OSX 上获取用户名(或 Mac 替代 Environ("username"))
【发布时间】:2013-07-25 00:32:29
【问题描述】:

我的任务是创建一个安全的(Windows 版本)Excel 工作簿,该工作簿使用宏来验证用户是否有权查看内容。在 Excel 2010 for Windows 中,我使用 Environ("username") 函数来完成此操作。

我遇到的问题是组织中的一些用户使用 Mac 来完成他们的日常工作,而Environ 不适用于 OSX。

有没有人知道另一种查找 Mac 用户名的方法?我在网上看过,但我能找到的只是如何找到计算机的唯一标识符,而不是用户名。

我尝试用 Mac 做的事情是否可行?

感谢任何信息!

【问题讨论】:

  • 冒着指出显而易见的风险:拥有正确的“用户名”并不能保证您有权查看电子表格。在您的计算机上创建新用户非常简单...
  • @Floris 好点!自从我从事这个项目以来已经有很多年了,今天我会以不同的方式去做。但即便如此,这是在一个组织环境中,任何使用这些文件的人都无法创建新用户。尽管如此,根据我从那时起获得的知识和技能,我今天会采取与当时不同的方式。

标签: excel vba macos excel-2010


【解决方案1】:

您可以使用 AppleScript 来返回用户名并从 VBA 运行它。

下面的函数应该可以解决问题。

Function GetUserNameMac() As String
    Dim sMyScript As String

    sMyScript = "set userName to short user name of (system info)" & vbNewLine & "return userName"

    GetUserNameMac = MacScript(sMyScript)
End Function

【讨论】:

  • 非常感谢@CuberChase!明天我将尽快与我的一位用户进行测试,如果我有任何问题或无法使其正常工作,我会告诉你。
  • 没问题。我在我的 Mac 上对其进行了测试,它可以工作,但如果有任何问题,请发表评论。
  • 我刚刚测试了您提供的解决方案。它就像一个魅力!我非常感谢你在这方面的帮助。谢谢,谢谢,谢谢!
【解决方案2】:

Environ("USER")Environ("LOGNAME") 在 Mac 上返回与 MacScript 答案相同的内容。

【讨论】:

  • 请注意,字符串必须大写才能在 Mac 上正常工作。
【解决方案3】:

我在寻找与 Environ("COMPUTERNAME") 等效的 macOS 时发现了这个问题,因为我一直在使用它:

MacScript("do shell script ""hostname""")

如果您想获取所有三个常用用户 ID,则返回用户帐户名称:

MacScript("do shell script ""stat -f$Su /dev/console""")

这会返回数字用户 ID,通常是 501:

MacScript("do shell script ""stat -f$Uu /dev/console""")

这会返回用户的真实姓名(显示在菜单栏中):

MacScript("do shell script ""id -P $(stat -f%Su /dev/console | cut -d : -f 8""")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2019-03-26
    • 2013-08-19
    相关资源
    最近更新 更多