How to get the username of the current user

Article contributed by Astrid Zeelenberg

If you want a routine that works for all types of networks, you'll have to use an API call to show the username of an user. The following code, which needs to be in a Module, was taken from Microsoft Knowledge Base article Q161394.

Option Explicit

'Declare for call to mpr.dll.
Declare Function WNetGetUser Lib "mpr.dll" _
        Alias "WNetGetUserA" (ByVal lpName As String, _
        ByVal lpUserName As String, lpnLength As Long) As Long

Const NoError = 0    'The Function call was successful

Function GetUserName() As String

'Buffer size for the return string.
Const lpnLength As Long = 255

'Get return buffer space.
Dim status As Integer

'For getting user information.
Dim lpName, lpUserName As String

'Assign the buffer size constant to lpUserName.
lpUserName = Space$(lpnLength + 1)

'Get the log-on name of the person using product.
status = WNetGetUser(lpName, lpUserName, lpnLength)

'See whether error occurred.
If status = NoError Then
    'This line removes the null character. Strings in C are null-
    'terminated. Strings in Visual Basic are not null-terminated.
    'The null character must be removed from the C strings to be used
    'cleanly in Visual Basic.
    lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
End If

'Display the name of the person logged on to the machine.
GetUserName = lpUserName

End Function

You could call it like this:

Sub Test()
    MsgBox GetUserName
End Sub

Note that if the user is not logged in, the function will return nothing (an empty string).

Click to view Terms of Use page

Click to view Disclaimer page