Visual Basic Benutzernamen auslesen?
Hallo zusammen!
Ich möchte bei einem Visual Basic Formular ein Textfeld erstellen wo automatisch der Benutzername eingetragen wird von dem der das Formular ausführt. Wie mach ich das bzw. wie lautet der Befehl?
Danke!
Ich habe mir erlaubt weitere Themen hinzuzufügen, das sollte Klarheit schaffen und den Kreis der Leser erweitern.
Super Danke!
3 Antworten
Option Explicit
Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long
Public Function FetchUserName() As String
Dim B As String * 100
Dim L As Long
L = 100
GetUserName B, L
FetchUserName = Strings.Left(B, L - 1)
End Function
Offenbar ist dir bei Copy Paste mehreres 'ausserhalb' der Funktion gelandet.
Vielleicht hast du auch 'zwei' OPtion Explicit jetzt im Code.
Hast du ggf ein 64Bit Office ?
Dann nach der 64bit Variante dieser Declare Anweisung googlen.
Bei mir funktioniert dies inzwischen über viele Office Versionen (Ist schliesslich die Operating System Variante) bestens. Die beiden Dinge müssen in einem Modul platziert werden. Ggf in ein eigenes modul isoliert kopieren.
Habe ich geprüft. Leider ist mir nichts aufgefallen und ich habe 64 Bit office
Hier die 64Bit Variante:
Public Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As LongPtr) As Long Eine andere Lösung (Eigentlich braucht man nur Googlen
Dim wshNet As Object
Set wshNet = CreateObject("WScript.Network")
MsgBox "Hello, " & wshNet.UserName & "!"
Set wshNet = Nothing
Das ist schonmal ein richtiger schritt! Aber ich möchte ja das der name in das Textfeld eingetragen wird. Jetzt ist es so das wenn ich etwas in das textfeld schreiben möchte kommt ein fenster mit "Hallo (Benutzername)"
Naja. Anstatt es in der Messagebox auszugeben muss du es eben in das Textfeld ausgeben. Ich kenne nun den Namen deines Textfeldes nicht.
DeinTextFeld.Text = wshNet.UserName
Funktionier!! Der Befehl lautet jetzt:
Dim wshNet As Object
Set wshNet = CreateObject("WScript.Network")
TextBox2.Text = wshNet.username
Set wshNet = Nothing
(Eine keine bitte habe ich allerdings noch...Ich muss damit der Benutzername eingetragen wird in den Feld eine Taste drücken, geht das auch ohne?)
Welche Taste drückst du und was passiert da. Du bist der Programmierer. Du bestimmst wenn Code ausgeführt wird NICHT ein Knopfdruck. Auch ein Knopfdruck kann simuliert werden.
Ich fahre mit dem Mauszeiger in das Feld und drücke irgend eine Taste auf der Tastatur... Egal welche es ist immer das selbe.
In Excel werden permanent Events ausgelöst wegen der Aktivitäten, die man auf dem Blatt macht.
Eine davon ist "Selection_Change". Wenn du also in die Zelle Klickst um die es geht, dann im Selection_Change Event dafür sorgen, dass zu dieser Zelle der User eingetragen wird.
ACHTUNG: Es mag auch Zellen geben, wo dies nicht gewünscht ist, dies gilt es dann z.Bsp: per if Bedingungen über Reihe und Spalte einzuschränken.
Danke aber was muss ich genau eingeben und wo lege ich fest in welches Excel feld es eingetragen wird?
Ist dir klar, dass ein Visual Basic Formular etwas anderes ist ein Excel Tabellenblatt?
Beschreibe erst einmal genau, was du mit welchem Programm vor hast. Sonst kann es nur bei allgemeinen Tipps bleiben.
So jetzt nochmal im Klartext: Ich habe eine Excel Tabelle für ein Inventur. In der Excel Tabelle habe ich mit Makros eine Schaltfläche erstellt die ein kleines Fenster öffnet wo man die Daten für die Inventur eintragen kann zb. Welches PC Modell, Datum, Zustand etc.. Es gibt auch ein Textfeld wo der Win 10 Benutzername eingetragen werden soll allerdings weiß ich nicht wie man das im Microsoft Excel Visual Basic hinterlegt und das ist meine Frage…. Kann mir da jemand helfen?
Funktioniert leider nicht :( und es kommt die meldung "End Sub" benötigt
Mit End Sub wird das Ende der Subroutine markiert, du musst es nur dazuschreiben.
Habe ich schon Probiert und dann kommt: Fehler beim Kompilieren
Nach End Sub, End Function oder End Property können nur Kommentare stehen
Lass mal Quelltext sehen aber lade es bitte auf pastebin.com hoch damit man es auch lesen kann.
Dann kann ich weiterhelfen. So tappe ich nur im dunklen was für ein Unsinn in deinen Code ist.
Hier ist der Hund begraben
Private Sub TextBox2_Change()
MsgBox "Current user is " & Application.username
End Function <-- sollte heisen End Sub
aber das sit auch nicht das was du willst, ich meine das Text_Changed Ereignis
Hat aufjeden fall geklapt aber ich möchte ja das der name Automatisch im Text feld eingetragen werden soll. kannst du mir da auch helfen?
Ja ich schau mal, lass mir ein wenig Zeit. Versuch es erst mal so etwa keine Ahnung welche Spalte du brauchst.
Cells(last, 7).Value = Application.username
unter CommandButton_Fertig_Click()
Ich muss mir erst mal Bier aus dem SUpermarkt holen...
Ein Tipp noch: Entferne immer alle leeren Subs, das macht den Quelltext übersichtlicher.
hast du schon was gefunden bzw bist du schlauer geworden? ^^
Das ganze Script kann ich dir nicht überarbeiten weil ich nicht weis wie dein Userform aussieht, es sollte alles intuitiv logisch sein wie du den Wert in das Textfeld bekommst.
Hi!
Welchen User willst DU?
Den , der gerade unter Windows angemeldet ist?
Den bekommst Du mit folgender Zeile:
Username = Environment.UserName
Gruß Horst
leider auch nichts gebracht.. Jetzt kommt die fehlermeldung:
Fehler beim Kompilieren
Nach End Sub, End Function oder End Property können nur Kommentare stehen