Visual Basic Benutzernamen auslesen?

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

Super Danke!

4 Antworten

Woher ich das weiß:Beruf – Früher Softwareentwickler bei CSDIT

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

0
@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.

0
@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?

 

0
@AtomicAdam
Probier mal das:

MsgBox "Current user is " & Application.UserName

 

1
@geri3d

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

0
@AtomicAdam

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

1
@geri3d

Habe ich schon Probiert und dann kommt: Fehler beim Kompilieren

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

1
@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.

1
@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

1
@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?

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

1
@AtomicAdam

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

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

1
@geri3d

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

0
@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.

0
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

leider auch nichts gebracht.. Jetzt kommt die fehlermeldung:

Fehler beim Kompilieren

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

0
@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.

0
@IchMalWiederXY

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

0
@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

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

0
@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

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

0
@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.

0
@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.

0
@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. 

0

Sorry! Bei Excel geht das so:

ActiveCell.Text = Application.Username

Hi!

Welchen User willst DU?

Den , der gerade unter Windows angemeldet ist?

Den bekommst Du mit folgender Zeile:

Username = Environment.UserName

Gruß Horst

Was möchtest Du wissen?