Come inserire il nome utente di Windows in una cella

Sonia ha notato che quando Office viene installato, l’utente specifica il proprio nome. È possibile accedere a questo nome in alcuni programmi di Office, come in Word. Sonia si chiede come possa accedere al nome dell’utente in Excel e inserirlo in una cella.

Il modo per farlo è implementare una breve macro di una riga che acceda alla proprietà UserName dell’oggetto Application. Questa tecnica è descritta in dettaglio in questo articolo.

Questo approccio è ottimo per determinare il nome utente associato all’installazione corrente di Excel. Tuttavia, potrebbe non corrispondere a chi sta utilizzando la cartella di lavoro corrente. Ad esempio, se la cartella di lavoro è condivisa, è possibile che più persone la utilizzino contemporaneamente. In tal caso, hai bisogno di un modo per determinare tali nomi, come mostrato qui:

 

Function NomiUtenti() As String
    Dim Users As Variant
    Dim sMsg As String
    Dim iIndex As Integer

    Users = ActiveWorkbook.UserStatus

    For iIndex = 1 To UBound(Users, 1)
        sMsg = Users(iIndex, 1) & vbLf
    Next iIndex
    'rimuove l'avanzamento di riga finale
    sMsg = Left(sMsg, Len(sMsg) - 1)

    NomiUtenti = sMsg
End Function

 

 

Per utilizzare la funzione è sufficiente inserire la seguente formula nella cella in cui si desidera che appaiano i nomi:

=NomiUtenti()

 

Se invece vuoi sapere chi sta utilizzando il computer attualmente, è meglio guardare oltre Office e prendere invece il nome da Windows stesso. In questo modo puoi determinare chi ha effettuato l’accesso a Windows e utilizzarlo come nome utente. Ciò richiede una dichiarazione di chiamata di funzione API, ma per il resto è relativamente semplice:

 

#If VBA7 Then
    Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _
      Alias "GetUserNameA" (ByVal lpBuffer As String, nSize _
      As Long) As LongPtr
#Else
    Private Declare Function GetUserName Lib "advapi32.dll" _
      Alias "GetUserNameA" (ByVal lpBuffer As String, nSize _
      As Long) As Long
#End If


Function NomeUtente() As String
    Dim strBuff As String * 100
    Dim lngBuffLen As Long

    lngBuffLen = 100
    GetUserName strBuff, lngBuffLen
    NomeUtente = Left(strBuff, lngBuffLen - 1)
End Function

 

 

 

Tags: , , , , , , , , , , ,

Ti è stato utile?