Is there an alternative method to using Environ("UserName") with Microsoft access

I have been using the  Environ("UserName") funcion and it works great.  It retuns the username of the current user logged into the system and I can use that name to perform different tasks.

Problem:  I built an application for an organization that categorizes its users into different security classes.  Power Users, laptop users, and desktop users.  

The application works fine for the Power users and laptop users, but falls into error when desktop users are using the application.

What I found is that the deskstop users are restricted from accessing their C: drive and desktop and can only access the shared folders on the network and applications installed on the PC.

Is there another funciton or method I can use to capture the user name of a user with desktop privilages?
Who is Participating?
JezWaltersConnect With a Mentor Commented:
OK, how about something like this?
Option Explicit
Option Compare Database

Public Function DesktopPrivileges() As Boolean

    ' Declare constants
    Const TEST_FILE As String = "C:\Temp\TestFile.txt"

    ' Declare variables
    Dim intTestFile As Integer

    ' Open test file
    intTestFile = FreeFile
    On Error GoTo OpenError:
    Open TEST_FILE For Output As intTestFile
    DesktopPrivileges = True

    ' Close & delete test file
    Close intTestFile
    Kill TEST_FILE

    ' Exit
    Exit Function

' Handle open error

    DesktopPrivileges = False

End Function

Open in new window

This might do the trick:

Public Function funWinUser() As String
    ' Comments  : Retrieves the name of the user logged into Windows
    On Error GoTo gtErr
    Dim lngLen As Long
    Dim strBuf As String
    Const MaxUserName As Integer = 255
    strBuf = Space$(MaxUserName)
    lngLen = MaxUserName
    If CBool(TSB_API_GetUserName(strBuf, lngLen)) Then
        funWinUser = Left(strBuf, lngLen - 1)
        funWinUser = ""
    End If
    Exit Function
    MsgBox Err
    GoTo gtExit
End Function

Open in new window

Whups, you'll need the declaration:

' Objects for GetUserName_TSB()
Declare Function TSB_API_GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Open in new window

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

What exactly do you mean by "desktop privileges"?
RDLFCAuthor Commented:
RemRemRem i will check out your solution later.

JezWalters by desktop privileges I mean the user is restricted because of network security reasons from accessing their C: drive.
No offense to RemRemRem, but I reckon you'll find her solution returns the same results as your Environ() approach.

Have you thought of establishing desktop privileges by trying to write a temporary file to the C: drive instead?
RDLFCAuthor Commented:
No I have to work around the company's security envirionment.  I will not be able to alter any user privialges.  

I think you're misunderstanding my suggestion - you can determine the user's privileges by attempting to write a file to the C: drive.

If the attempt fails the user DOESN'T have desktop privileges.  If the attempt succeeds, the user DOES have desktop privileges and you can then delete the temporary file.
RDLFCAuthor Commented:
okay.  I can use that.  Do you have code for me to do that via VBA?
... please hold the line ...!  :-)
RDLFCAuthor Commented:
I can use your solution to accomplish what I am interested in doing.
Only a 'B' grade?  What didn't work?
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.