Visual Basic Benutzernamen auslesen?

geri3d  15.07.2020, 14:00

Ich habe mir erlaubt weitere Themen hinzuzufügen, das sollte Klarheit schaffen und den Kreis der Leser erweitern.

AtomicAdam 
Beitragsersteller
 15.07.2020, 15:26

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

AtomicAdam 
Beitragsersteller
 15.07.2020, 14:25

leider auch nichts gebracht.. Jetzt kommt die fehlermeldung:

Fehler beim Kompilieren

Nach End Sub, End Function oder End Property können nur Kommentare stehen

IchMalWiederXY  15.07.2020, 21:14
@AtomicAdam

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.

AtomicAdam 
Beitragsersteller
 16.07.2020, 08:35
@IchMalWiederXY

Habe ich geprüft. Leider ist mir nichts aufgefallen und ich habe 64 Bit office

IchMalWiederXY  16.07.2020, 14:18
@AtomicAdam

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

AtomicAdam 
Beitragsersteller
 16.07.2020, 15:58
@IchMalWiederXY

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)"

IchMalWiederXY  17.07.2020, 16:21
@AtomicAdam

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

AtomicAdam 
Beitragsersteller
 20.07.2020, 07:45
@IchMalWiederXY

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?)

IchMalWiederXY  20.07.2020, 20:42
@AtomicAdam

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.

AtomicAdam 
Beitragsersteller
 21.07.2020, 07:40
@IchMalWiederXY

Ich fahre mit dem Mauszeiger in das Feld und drücke irgend eine Taste auf der Tastatur... Egal welche es ist immer das selbe.

IchMalWiederXY  21.07.2020, 14:37
@AtomicAdam

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. 

Woher ich das weiß:Recherche

AtomicAdam 
Beitragsersteller
 15.07.2020, 12:58

Danke aber was muss ich genau eingeben und wo lege ich fest in welches Excel feld es eingetragen wird?

CSANecromancer  15.07.2020, 13:31
@AtomicAdam

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.

AtomicAdam 
Beitragsersteller
 15.07.2020, 13:55
@CSANecromancer

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?

 

geri3d  15.07.2020, 13:55
@AtomicAdam
Probier mal das:

MsgBox "Current user is " & Application.UserName

 

AtomicAdam 
Beitragsersteller
 15.07.2020, 14:16
@geri3d

Funktioniert leider nicht :( und es kommt die meldung "End Sub" benötigt

geri3d  15.07.2020, 16:58
@AtomicAdam

Mit End Sub wird das Ende der Subroutine markiert, du musst es nur dazuschreiben.

AtomicAdam 
Beitragsersteller
 16.07.2020, 08:09
@geri3d

Habe ich schon Probiert und dann kommt: Fehler beim Kompilieren

Nach End Sub, End Function oder End Property können nur Kommentare stehen

geri3d  16.07.2020, 08:11
@AtomicAdam

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.

geri3d  16.07.2020, 08:18
@AtomicAdam

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

AtomicAdam 
Beitragsersteller
 16.07.2020, 08:28
@geri3d

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?

geri3d  16.07.2020, 08:35
@AtomicAdam

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()

geri3d  16.07.2020, 08:40
@AtomicAdam

Ich muss mir erst mal Bier aus dem SUpermarkt holen...

Ein Tipp noch: Entferne immer alle leeren Subs, das macht den Quelltext übersichtlicher.

AtomicAdam 
Beitragsersteller
 17.07.2020, 12:00
@geri3d

hast du schon was gefunden bzw bist du schlauer geworden? ^^

geri3d  17.07.2020, 12:28
@AtomicAdam

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