Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Code ändern auf 64 Bit - Version
19.09.2023 10:30:47
Harald
Hallo zusammen,

folgender Code zur Ermittlung des Benutzernamens funktioniert seit der Umstellung in meiner Firma auf Office365 64 Bit-Variante nicht mehr.

Kann mir jemand helfen? Wie muss der Code verändert werden?

Vielen Dank und Grüße
Harald



Option Explicit
'Aktuellen_Benutzer_ermitteln
Dim BName As String
Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

Function BenutzerName1() 'E......-Nr.
Dim Buffer As String * 100
Dim BuffLen As Long
Application.Volatile
BuffLen = 100
GetUserName Buffer, BuffLen
BenutzerName1 = Left(Buffer, BuffLen - 1)
End Function
Function BenutzerName() 'Vorname Name bzw. alte USERID
Application.Volatile
BenutzerName = Application.UserName
End Function

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code ändern auf 64 Bit - Version
19.09.2023 10:47:44
Ulf
Für 32-Bit gültig


Public Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, ByRef nMax As Long) As Boolean
Public Function GetUser() As String
On Local Error GoTo getUserERR
Dim strBuffer As String
Dim lngRet As Long
Dim lngBuffer As Long
Dim strRet As String
strBuffer = String(64, 0)
lngRet = GetUserName(strBuffer, lngBuffer)
If lngRet = 0 Then
strBuffer = String(lngBuffer, 0)
lngRet = GetUserName(strBuffer, lngBuffer)
strRet = Left$(strBuffer, lngBuffer - 1)
End If
getUserOUT:
GetUser = strRet
Exit Function
getUserERR:
strRet = ""
Debug.Print Err.Number & vbCrLf & Err.Description
Resume getUserOUT
End Function


Sollte in 64:


Public Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, ByRef nMax As LongPtr) As Boolean
Public Function GetUser() As String
On Local Error GoTo getUserERR
Dim strBuffer As String
Dim lngRet As Long
' Test: Dim lngBuffer As LongPtr
Dim lngBuffer As Long
Dim strRet As String
strBuffer = String(64, 0)
lngRet = GetUserName(strBuffer, lngBuffer)
If lngRet = 0 Then
strBuffer = String(lngBuffer, 0)
lngRet = GetUserName(strBuffer, lngBuffer)
strRet = Left$(strBuffer, lngBuffer - 1)
End If
getUserOUT:
GetUser = strRet
Exit Function
getUserERR:
strRet = ""
Debug.Print Err.Number & vbCrLf & Err.Description
Resume getUserOUT
End Function

Ausprobieren, hab kein 64Bit
hth
Ulf
Anzeige
AW: Code ändern auf 64 Bit - Version
19.09.2023 10:48:52
Yal
Hallo Harald,

in https://www.office-hilfe.com/support/threads/getusername-in-win7-x64.43003/ aus einem Beitrag von auch hier sehr geschätztem Nepumuk:

#If Win64 Then

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


Wenn der Code nur auf eine Maschine läuft, dann nur der ersten Block verwenden:
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _

Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long


VG
Yal
Anzeige
AW: Code ändern auf 64 Bit - Version
19.09.2023 12:38:21
volti
Hallo,

in Ergänzung zu Yal's Aufführung:

Für diese Funktion reicht die Ergänzung des Schlüsselworts PtrSafe, alles andere bleibt gleich.

Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _

Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long


Die Funktion funktioniert so für 32-Bit und 64-Bit unter VBA7, also alle neueren Excel-Versionen. Lediglich für 32 Bit, VBA 6 muss die alte Version benutzt, also auch deklariert werden.

Für die neueren Excel-Versionen ist demnach hier keine Unterscheidung nach 64-Bit (Kompilierschalter #IF) nötig.

Eine Unterscheidung nach 64-Bit ist nur für ein paar wenige Funktionen überhaupt erforderlich.

Gruß KH
Anzeige
AW: Code ändern auf 64 Bit - Version
19.09.2023 14:59:44
Harald
Hallo zusammen,

vielen Dank an die Profis!!! Jetzt funktioniert die Datei DANK EUCH wieder.

Ich bin sehr froh, weil viele Kolleg*innen betroffen waren.

Ich wünsche allen einen schönen Tag und bleibt gesund.

Harald

AW: Code ändern auf 64 Bit - Version
19.09.2023 16:46:38
daniel
HI
kurze Frage, was macht dieser Code?
Usernamen kann man mit Environ("Username") (windows-Anmeldename) oder mit Application.Username (In die MS-Produkte eingetragener Name des Anwenders) ermitteln, damit wäre man Versionsunabhängig, sofern das gezeigte Makro das gleiche ermittelt.
Gruß Daniel
AW: Code ändern auf 64 Bit - Version
19.09.2023 17:06:48
volti
Hallo Daniel,

GetUsername gibt wie Environ("Username") den Windows-Anmeldenamen zurück. Ist damit das selbe.

Die Anwendung ist Geschmacksache. Die API-Version hat mehr code und ist für den Laien m.E. schwerer zu durchschauen.

Die Versionsabhängigkeit war jetzt so wie ich das sehe eine einmalige Sache bis das Betriebssystem mal wieder einen Sprung nach vorne macht, falls überhaupt.

Gruß KH
Anzeige
AW: Code ändern auf 64 Bit - Version
19.09.2023 17:13:17
daniel
"Die API-Version hat mehr code und ist für den Laien m.E. schwerer zu durchschauen."

also einfach nur Angeberrei, um Menschen zu beeindrucken, die keine Ahnung haben?
AW: Code ändern auf 64 Bit - Version
19.09.2023 17:49:21
Ulf
In gesicherten Umgebungen kann es sein, dass der (priviligiertere) Anwender
(Powershell, Webdev usw) SET Befehle an der Konsole ausführen können muss und somit per
cmd
SET username=iwas
die Schranken per Variable umgeht. Der Anmeldename an AD o. MS bleibt unveränderlich.

177 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige