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).