Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Benutzernamen lang und kurz auslesen mit code

Benutzernamen lang und kurz auslesen mit code
chris
Hallo VBA experten,
habe folgenden Code von einem Ex Kollegen bekommen.
Dieser klappt auch super.
Ich kann die Kennung angebenund erhalte den Kompletten Benutzernamen in einer MSGbox.
Was ich aber gerne möchte und nicht schaffe ist es aus dem Kompletten Namen die kennung herauszubekommen.
Würde mich sehr freuen wenn mir jemand helfen könnte.
Dafür im voraus schon einmal vielen Dank !
die Funktion "BenutzerNameKurz" würde schon das passende ergebniss liefern aber leider eben nur von dem aktuell angemeldeten Benutzer und nicht von einem benutzer von dem ich den Namen vorgeben.
Hier der Code.

Option Explicit
Private Enum EXTENDED_NAME_FORMAT
NameSamCompatible = 2
End Enum
Private Declare Function GetUserNameEx Lib "secur32.dll" Alias "GetUserNameExA" (ByVal  _
NameFormat As EXTENDED_NAME_FORMAT, ByVal lpNameBuffer As String, ByRef nSize As Long) As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String,  _
nSize As Long) As Long
Sub Benutzername()
MsgBox BenutzerNameLang("chris")
End Sub
Function BenutzerNameLang(Optional Kennung As String) As String
Dim sBuffer As String, ret As Long, u
sBuffer = String(256, 0)
ret = Len(sBuffer)
If Kennung  "" Then
Set u = GetObject("WinNT://" & Replace(Kennung, "\", "/") & ",User")
BenutzerNameLang = Trim(Replace(u.FullName, "*", ""))
Set u = Nothing
ElseIf GetUserNameEx(NameSamCompatible, sBuffer, ret)  0 Then
Set u = GetObject("WinNT://" & Replace(Left$(sBuffer, ret - 1), "\", "/") & ",User")
BenutzerNameLang = Trim(Replace(u.FullName, "*", ""))
Set u = Nothing
End If
End Function
Function BenutzerNameKurz() As String
Dim strUserName As String
strUserName = VBA.String(100, VBA.Chr$(0))
GetUserName strUserName, 100
BenutzerNameKurz = VBA.UCase(VBA.Left$(strUserName, VBA.InStr(strUserName, VBA.Chr$(0)) - 1) _
)
End Function

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Benutzernamen lang und kurz auslesen mit code
21.01.2010 12:38:12
bst
Hi Chris,
so wie ich das verstehe kommst Du mit GetUserName und GetUserNameEx nur an Informationen zum angemeldeten User. Mit NetUserGetInfo kannst Du Informationen eines beliebigen Users bestimmen, benötigst dazu aber dessen 'kurzen Namen'. Von lang auf kurz geht so also wohl auch nicht.
Versuche das doch alternativ mal mit WMI, also in etwa so.
HTH, Bernd
--
Option Explicit

Function BenutzerNameKurz(ByVal strLongName) As String
    Dim strComputer As String
    Dim objWMIService As Object, colUser As Object, objUser As Object
    
    On Error Resume Next
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    'Set colUser = objWMIService.ExecQuery("Select * from Win32_UserAccount")
    Set colUser = objWMIService.ExecQuery("Select * from Win32_UserAccount WHERE FullName='" & strLongName & "'")
    For Each objUser In colUser
        BenutzerNameKurz = objUser.Name
        Exit Function
    Next
End Function

Sub x()
    MsgBox BenutzerNameKurz("Langer Name")
End Sub


Anzeige
AW: Benutzernamen lang und kurz auslesen mit code
21.01.2010 22:48:03
chris
Hallo werde ich testen.
Gebe dann Feedback.
Danke im voraus !
;
Anzeige
Anzeige

Infobox / Tutorial

Benutzernamen in VBA auslesen: Lang und Kurz


Schritt-für-Schritt-Anleitung

Um den Benutzernamen in VBA auszulesen, kannst du die Funktionen GetUserName und GetUserNameEx verwenden. Hier ist eine einfache Anleitung:

  1. Öffne Excel und gehe zu den Entwicklertools (falls diese nicht sichtbar sind, aktiviere sie über die Excel-Optionen).
  2. Füge ein neues Modul hinzu:
    • Klicke auf "Einfügen" -> "Modul".
  3. Kopiere den folgenden Code in das Modul:
Option Explicit
Private Enum EXTENDED_NAME_FORMAT
    NameSamCompatible = 2
End Enum
Private Declare Function GetUserNameEx Lib "secur32.dll" Alias "GetUserNameExA" (ByVal _
NameFormat As EXTENDED_NAME_FORMAT, ByVal lpNameBuffer As String, ByRef nSize As Long) As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub Benutzername()
    MsgBox BenutzerNameLang("chris")
End Sub

Function BenutzerNameLang(Optional Kennung As String) As String
    Dim sBuffer As String, ret As Long, u
    sBuffer = String(256, 0)
    ret = Len(sBuffer)
    If Kennung <> "" Then
        Set u = GetObject("WinNT://" & Replace(Kennung, "\", "/") & ",User")
        BenutzerNameLang = Trim(Replace(u.FullName, "*", ""))
        Set u = Nothing
    ElseIf GetUserNameEx(NameSamCompatible, sBuffer, ret) <> 0 Then
        Set u = GetObject("WinNT://" & Replace(Left$(sBuffer, ret - 1), "\", "/") & ",User")
        BenutzerNameLang = Trim(Replace(u.FullName, "*", ""))
        Set u = Nothing
    End If
End Function

Function BenutzerNameKurz() As String
    Dim strUserName As String
    strUserName = VBA.String(100, VBA.Chr$(0))
    GetUserName strUserName, 100
    BenutzerNameKurz = VBA.UCase(VBA.Left$(strUserName, VBA.InStr(strUserName, VBA.Chr$(0)) - 1))
End Function
  1. Führe das Makro Benutzername aus, um den vollständigen Benutzernamen in einer MsgBox anzuzeigen.

Häufige Fehler und Lösungen

  • Fehler: "Benutzer nicht gefunden"

    • Stelle sicher, dass die Kennung korrekt eingegeben wurde. Die Kennung sollte im Format DOMAIN\username sein.
  • Fehler: "Zugriff verweigert"

    • Du benötigst möglicherweise Administratorrechte, um auf bestimmte Benutzerinformationen zuzugreifen.

Alternative Methoden

Eine alternative Methode, um den Benutzernamen auszulesen, ist die Verwendung der Windows Management Instrumentation (WMI). Hier ist ein Beispiel, das du verwenden kannst:

Function BenutzerNameKurz(ByVal strLongName As String) As String
    Dim strComputer As String
    Dim objWMIService As Object, colUser As Object, objUser As Object

    On Error Resume Next
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set colUser = objWMIService.ExecQuery("Select * from Win32_UserAccount WHERE FullName='" & strLongName & "'")
    For Each objUser In colUser
        BenutzerNameKurz = objUser.Name
        Exit Function
    Next
End Function

Praktische Beispiele

Hier sind einige praktische Anwendungen der Funktionen:

  1. Langer Benutzername von "Max Mustermann" auslesen:

    MsgBox BenutzerNameLang("Max Mustermann")
  2. Kurzer Benutzername des aktuell angemeldeten Benutzers:

    MsgBox BenutzerNameKurz()

Tipps für Profis

  • Wenn du oft mit Benutzerinformationen arbeitest, speichere die Funktionen in einem Add-In, um sie schnell verfügbar zu haben.
  • Überlege, die Funktion GetUserNameEx zu nutzen, um erweiterte Informationen über Benutzer zu erhalten.

FAQ: Häufige Fragen

1. Kann ich mit diesen Funktionen auch den Benutzernamen eines anderen Computers auslesen? Ja, das ist möglich, solange du die richtigen Berechtigungen hast und der Computer im Netzwerk erreichbar ist.

2. Funktionieren diese Codes auch in Excel für Mac? Nein, die vorgestellten Methoden sind spezifisch für die Windows-Version von Excel.

3. Was ist der Unterschied zwischen GetUserName und GetUserNameEx? GetUserName gibt den aktuellen Benutzernamen zurück, während GetUserNameEx die Möglichkeit bietet, erweiterte Informationen über einen Benutzer zu erhalten, z.B. den vollständigen Namen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige