繁体   English   中英

Excel / VBA Environ(“用户名”)错误

[英]Excel/VBA Environ(“username”) error

我有一个电子表格,其中包含各种模型输入,这些模型输入已加载到SQL Server数据库中。 此过程的一部分涉及构建审核跟踪记录,以了解谁更新了什么内容以及何时更新-我记录了用户名和计算机名以及时间戳。

在我的VBA代码中,我具有以下内容:

用户= VBA.environ $(“用户名”)

它在带有Office 2013的Win7计算机上运行。

当我运行代码时,一切正常,但是当生产中的某人运行它(在同一台机器上,但他们登录了,不是我)时,它落在了上面。 我使用了上面的变体(user = environ(“ username”),user = environ $(“ username”)),但总是得到相同的结果-它对我有用,但对其他人无效。

是否有人对如何解决此问题有任何想法?

环境变量不可靠

  1. 用户可以将值编辑为所需的任何内容
  2. 用户可以删除环境变量。

尝试这些API方法之一。

选项1

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

Sub Sample()
    Dim lpBuff As String * 25
    Dim ret As Long, UserName As String

    ret = GetUserName(lpBuff, 25)
    UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

    MsgBox UserName
End Sub

选项2

Option Explicit

Private Declare Function GetEnvironmentVariable Lib _
"kernel32" Alias "GetEnvironmentVariableA" _
(ByVal lpName As String, ByVal lpBuffer As String, _
ByVal nSize As Long) As Long


Private Sub Sample()
    Dim strUserName As String * 255
    Dim x As Integer

    x = GetEnvironmentVariable("USERNAME", strUserName, Len(strUserName))
    If x > 0 Then
        x = InStr(strUserName, vbNullChar)
        If x > 0 Then
            MsgBox (Left$(strUserName, x - 1))
        Else
            MsgBox (Left$(strUserName, x))
        End If
    End If
End Sub

这个给你:

Sub Test()
    With CreateObject("WScript.Network")
        Debug.Print .UserName
        Debug.Print .ComputerName
        Debug.Print .UserDomain
    End With
End Sub

我总是使用Application.UserName因为它总是总是更好environ$("username")可以给您类似“ john〜smith”的东西,而Application.UserName可以给您“ John Smith”

我总是用

Environ("USERPROFILE")

但总的来说,我需要大量引用该人的桌面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM