Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Benutzernamen lang und kurz auslesen mit code | Herbers Excel-Forum


Betrifft: Benutzernamen lang und kurz auslesen mit code von: chris b.
Geschrieben am: 19.01.2010 10:21:59

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

  

Betrifft: AW: Benutzernamen lang und kurz auslesen mit code von: bst
Geschrieben am: 21.01.2010 12:38:12

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




  

Betrifft: AW: Benutzernamen lang und kurz auslesen mit code von: chris b.
Geschrieben am: 21.01.2010 22:48:03

Hallo werde ich testen.
Gebe dann Feedback.
Danke im voraus !


Beiträge aus den Excel-Beispielen zum Thema "Benutzernamen lang und kurz auslesen mit code"