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