Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ausführen von Makro nur für bestimmte User

ausführen von Makro nur für bestimmte User
11.04.2005 09:54:32
Makro
Hallo ForumUser,
ist es möglich das ein Makro nur bestimmte User ausführen können?
Ich hatte da an eine Möglichkeit gedacht über den Usernamen zu gehen wie in
etwa: If not Username Then dann Exit Sub
Hat jemand eine Idee?
Ich möchte hier nur 4 Usernamen das ausführen erlauben, einrichten, oder so...
User1: Thomas.Maier
User2: Sandra.Weiler
User3: Tanja.Franzke
User4: Rene.Schweller
Gruß Matze
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 10:02:10
Makro
Servus!
Guggst du hier: https://www.herber.de/mailing/038298h.htm
Und fuer die Abfrage wuerd ichs dann so machen:
If Buffer "UserName" Then Unload.Me
oder so aehnlich.
Gruss

Tobias
AW: ausführen von Makro nur für bestimmte User
11.04.2005 10:38:06
Makro
Hallo Tobias,
die Abfrage nach dem Username hab ich schon, ich komme nur nicht weiter wie der Code
aussehen könnte um Usern die nicht angegeben sind das ausführen des Makros zu unterbinden.
Gruß Matze
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 10:40:04
Makro
Servus!
Wieso denn komplett unterbinden? Ich wuerde den Code, den ich dir geschrieben habe, einfach dazu benuetzen. Wenn der nicht berechtigte User dann versucht, das Makro zu starten, beendet es sich automatisch.
Gruss

Tobias
AW: ausführen von Makro nur für bestimmte User
11.04.2005 10:45:56
Makro
ich bekomme da immer "Agument nicht optional"!!!!
Wo kann ich den bestimmen bei welchem Username nicht abgebrochen wird?
Ich habe von VBA nicht so den Durchblick...
Gruß
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 10:51:06
Makro
Servus!
Nunja, ohne VBA-Durchblick ist das schon ne gewagte Sache fuer dich...
Aber versuchen wirs mal:

If Buffer <> "marx" Then
Unload Me
End If
'So machste das halt fuer jeden User!
If Buffer <> "matze" Then
Unload Me
End If

Er ueberprueft also, wenn Username nicht marx und nicht matze, dann beenden.
Gruss

Tobias
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 11:07:13
Makro
Bekomme jetzt die Fehlermeldung "Fehler beim Kompilieren: Unzulässige Verwendung des Schlüsselworts Me"
Wenn ich jedoch daraus Unload.Me daraus mache, bekomme ich "Agument nicht optional"
AW: ausführen von Makro nur für bestimmte User
11.04.2005 11:10:52
Makro
Servus!
Versuchs mal statt Unload Me mit Me.Hide (soferns ne UserForm ist). Ich denke mal, dass das Unload Me nicht funktioniert, da es in einer if-Schleife steckt. Wie man das allerdings umgeht, weiss ich auch ned... dazu hab ich auch nicht genuegend VBA-Kenntnisse.
Gruss

Tobias
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 11:16:03
Makro
Ich arbeite nich mit einer Userform! Hab nur ein ganz normales Modul, Beispiel:

Sub Test()
If Buffer <> "Duffy.Duck" Then
Unload Me
End If
'So machste das halt fuer jeden User!
If Buffer <> "matze" Then
Unload Me
End If
MsgBox "berechtigt"
End Sub

Das ist nur zum Testen ob´s geht...
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 11:47:15
Makro
Hallo,
versuch doch mal zu umgehen in dem DU ne Sprungmarke benutzt.
Also etwa so:

Sub test()
If Buffer <> "marx" Then GoTo Ende
End If
'So machste das halt fuer jeden User!
If Buffer <> "matze" Then GoTo Ende
End If
:Ende
Unload Me
End Sub

Gruß
Heinz
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 12:27:04
Makro
Irgendwie geht das nicht...
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Dim Username As String

Private Sub Workbook_Open()
Dim Buffer As String * 100, BuffLen As Long
BuffLen = 100
GetUserName Buffer, BuffLen
Username = Left(Buffer, BuffLen)
'MsgBox Left(Buffer, BuffLen - 1)
Username = Left(Username, InStr(Username, vbNullChar) - 1)
If Trim$(Username) = "" Then Username = Application.Username
End Sub

Sub test()
If Buffer "Matthias.Weichert" Then GoTo Ende
'So machste das halt fuer jeden User!
If Buffer "Gast" Then GoTo Ende
MsgBox "Ja"
Ende:
MsgBox "Ne"
End Sub
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 13:52:10
Makro
Hallo,
du bist auf dem Holzweg!
in ein Modul:
Declare

Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

Function UserName()
Dim Buffer As String * 100
Dim BuffLen As Long
BuffLen = 100
GetUserName Buffer, BuffLen
UserName = Left(Buffer, BuffLen)
UserName = Left(UserName, InStr(UserName, Chr(0)) - 1)
End Function

Beispiel für Makro:

Sub Test()
Select Case Username()
Case "Thomas.Maier","Sandra.Weiler","Tanja.Franzke","Rene.Schweller"
Msgbox "Guten Tag " &Username()
Case Else
Msgbox Username() &" hat keine Berechtigung."
End Select
End Sub

Gruß
Declare muss vor Function!
Anzeige
AW: ausführen von Makro nur für bestimmte User
11.04.2005 15:45:41
Makro
Hallo u_
danke für deine Hilfe, klappt perfekt...
Gruß Matze

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro nur für bestimmte Excel User ausführen


Schritt-für-Schritt-Anleitung

Um ein Makro in Excel nur für bestimmte User auszuführen, kannst Du den folgenden VBA-Code verwenden. Dieser überprüft den Benutzernamen und erlaubt nur den vorgegebenen Usern den Zugriff.

  1. Öffne Excel und gehe zu Entwicklertools > Visual Basic.
  2. Füge ein neues Modul hinzu.
  3. Kopiere den folgenden VBA-Code in das Modul:
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function Username() As String
    Dim Buffer As String * 100
    Dim BuffLen As Long
    BuffLen = 100
    GetUserName Buffer, BuffLen
    Username = Left(Buffer, BuffLen)
    Username = Left(Username, InStr(Username, Chr(0)) - 1)
End Function

Sub Test()
    Select Case Username()
        Case "Thomas.Maier", "Sandra.Weiler", "Tanja.Franzke", "Rene.Schweller"
            MsgBox "Guten Tag " & Username()
        Case Else
            MsgBox Username() & " hat keine Berechtigung."
    End Select
End Sub
  1. Schließe den VBA-Editor.
  2. Führe das Makro Test aus.

Häufige Fehler und Lösungen

  • Fehler: "Argument nicht optional"
    Dieser Fehler tritt auf, wenn Du versuchst, Unload Me in einem Modul zu verwenden, das kein UserForm ist. Verwende stattdessen Exit Sub oder eine andere Logik, um das Makro zu beenden.

  • Fehler: "Fehler beim Kompilieren: Unzulässige Verwendung des Schlüsselworts Me"
    Stelle sicher, dass Du den Code in einem Modul und nicht in einer UserForm schreibst.


Alternative Methoden

Eine andere Möglichkeit, die Berechtigung für User zu überprüfen, ist die Verwendung von GoTo-Anweisungen. Hier ein Beispiel:

Sub Test()
    If Username() <> "Thomas.Maier" Then GoTo Ende
    If Username() <> "Sandra.Weiler" Then GoTo Ende
    MsgBox "Zugriff gewährt."
    Exit Sub
Ende:
    MsgBox "Zugriff verweigert."
End Sub

Diese Methode ist einfacher, könnte aber schwer zu pflegen sein, wenn Du viele Benutzer hast.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um das Konzept zu verdeutlichen:

Sub Beispiel()
    If Username() <> "Tanja.Franzke" Then
        MsgBox "Zugriff verweigert."
        Exit Sub
    End If
    MsgBox "Willkommen, Tanja!"
End Sub

Führe das Makro aus, um zu sehen, wie es funktioniert. Du kannst die Namen anpassen, um verschiedene Benutzer zu testen.


Tipps für Profis

  • Überlege, die Benutzernamen in einem Array zu speichern, um die Wartbarkeit zu verbessern.
  • Verwende Application.UserName, um den aktuell angemeldeten Excel-User zu ermitteln, falls Du keine API-Aufrufe machen möchtest.
  • Teste den VBA-Code in der richtigen Excel-Version, um sicherzustellen, dass alle Funktionen unterstützt werden.

FAQ: Häufige Fragen

1. Kann ich mehrere User mit Bedingungen überprüfen?
Ja, Du kannst mehrere Bedingungen mit If ... Then oder mit Select Case wie im obigen Beispiel verwenden.

2. Wie kann ich den Usernamen automatisch abrufen?
Verwende die GetUserName-Funktion, um den aktuellen Windows-Benutzernamen zu erhalten.

3. Funktioniert das in allen Excel-Versionen?
Die meisten VBA-Funktionen sind in den neueren Excel-Versionen verfügbar, aber teste den Code in Deiner spezifischen Version.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige