Попробуйте это объявление, пожалуйста:
Private Declare PtrSafe Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" _
(ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
И используйте следующую функцию для получения зарегистрированного имени пользователя:
Function GetUserName() As String
Const lpnLength As Long = 255
Dim status As Long, lpName, lpUserName As String
'Assign the buffer size constant to lpUserName.
lpUserName = Space$(lpnLength + 1)
status = WNetGetUser(lpName, lpUserName, lpnLength)
'See whether error occurred.
If status = 0 Then
lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
End If
GetUserName = lpUserName
End Function
Его можно вызвать:
Sub TestUserName()
Debug.Print GetUserName
End Sub
Все выше, только если вы настаиваете на использовании API ...
Но у VBA есть простой способ его получить:
Debug.Print Application.UserName
Если вам это не нравится, используя VBScript ( в VBA) может помочь:
Sub testUserNameVBSCript()
Dim userName As String
userName = CreateObject("WScript.Network").userName
Debug.Print userName
End Sub