Dropdown-Menü in Excel - Manager muss mehr Optionen haben


0

Ich habe Dropdown-Menüs für Excel-Zellen eingerichtet (in office365), auf die alle Mitarbeiter zugreifen und die sie ändern können. Ich möchte, dass Manager eine zusätzliche Option in der Liste haben, die nur sie auswählen können. kann das gemacht werden und wie? Vielen Dank


2
Mir sind keine Funktionen bekannt, die dies ermöglichen würden. Sie können Makros verwenden, um das Benutzerkonto zu überprüfen und die Validierungsliste entsprechend zu ändern.
Máté Juhász

Ich habe diese zuvor noch nicht verwendet. Wie kann ich mehr über Ihre mögliche Problemumgehung erfahren?
Etienne

"Wie kann ich mehr über Ihre mögliche Arbeit erfahren?" - Dies ist keine Aufgabe zum Lernen von Makros. Wenn Sie die Grundlagen kennen, können Sie versuchen, dieses Problem zu lösen, aber es wird wahrscheinlich Monate dauern. Oder stellen Sie einfach einen Fachmann ein.
Máté Juhász

Antworten:


0

Probieren Sie dieses Beispiel aus: Fügen Sie eine zusätzliche Spalte des Kontos hinzu. In meinem Beispiel ist:

A1 Account
A2 Staff
A3 Manager

Zusatzspalte des Kontos

Gehen Sie zu Formeln - Definierte Namen - Name Staff-Bereich und Name Manager-Bereich:

B1 Liste
B2 A
B3 B
B4 C
B5 D
B6 E
B7 F

Der benannte Bereich B2:B6ist Staff

Der benannte Bereich B2:B7ist Manager

Name Stabreichweite

Name Manager-Bereich

D2Gehen Sie für die Dropdown- Liste Konto zuerst hinzufügen zu Daten - Datenüberprüfung, wählen Sie Liste und wählen Sie die Quelle:=Account

Dann fügen Sie eine weitere Liste E2durch die Funktion hinzu:=INDIRECT(D2)

Liste des Kontos

Liste

Ergebnis:

Ergebnis


Bilder können eine Antwort verbessern , aber bitte geben Sie die wesentlichen Informationen Ihrer Antwort als Text ein .
G-Man

Dies beantwortet die Frage nur teilweise. Die Frage fragt nach dem Verwalten des Zugriffs, daher sollte es die Benutzer einschränken. Soweit sie ihre Rolle wählen können, kann jeder tun, was er will.
Máté Juhász

0

Ich schlage eine vorläufige VBA-basierte Lösung vor. Probieren Sie es aus. Beachten Sie, dass dies nur unter Windows 7 64 Bit Office 2013 64 Bit in einem eigenständigen System getestet wird.

In diesem Beispiel wird die Dropdown-Validierungsliste in Zelle E3 erstellt.

Drücken Sie in Ihrem entsprechenden Arbeitsblatt ALT + F11, um auf den VBA-Editor zuzugreifen. Doppelklicken Sie nun im linken Fensterbereich auf "Thisworkbook". Wählen Sie im rechten Codefenster in der ersten Dropdown-Liste die Option Allgemein und in der zweiten Dropdown- Liste die Option Deklarationen aus.

Gib den folgenden Code ein

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

Dies ist ein Versuch, die richtige Funktion basierend auf OS Bitness zu deklarieren. Es kann einen Kompilierungsfehler auslösen oder eine der Zeilen in Rot hervorheben, je nachdem, welche Betriebssystem-Bitanzahl Sie haben. Ignorieren Sie diesen Fehler vorerst.

Wenn dies nicht funktioniert, geben Sie bei 64-Bit-Windows nur die erste declare-Anweisung ein und entfernen Sie den Rest. Private Declare PtrSafe....und zweitens, falls Sie 32-Bit-Windows haben.

Wählen Sie jetzt genau wie bei der Auswahl von "Allgemein - Deklarationen" das Ereignis " Arbeitsmappe öffnen" aus

Der folgende Unterprogramm-Platzhaltercode soll angezeigt werden

Private Sub Workbook_Open()

End Sub

Fügen Sie den folgenden Code zwischen diese beiden Zeilen ein

Dim lpBuff As String * 65
Dim username As String
Const mgr_usr = "Manager"
Get_User_Name lpBuff, 65
username = UCase(Left(lpBuff, InStr(lpBuff, Chr(0)) - 1))

If username = UCase(mgr_usr) Then

Range("E3").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Usr1,Usr2,Usr3,Mgr1,Mgr2"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Else
Range("E3").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Usr1,Usr2,Usr3"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End If

Haben Sie eine Anweisung " Const mgr_usr = "Manager" Manager ersetzen" mit dem tatsächlichen Benutzernamen des Managers gesehen?

Jedes Mal, wenn die Arbeitsmappe geöffnet wird, wird das Workbook Open-Ereignis ausgelöst. Zuerst wird versucht, den Windows-Benutzernamen abzurufen. Wenn es sich dann um den des Managers oder um alle anderen handelt, erstellen Sie benutzerdefinierte Dropdown-Listenmenüs in Zelle E3. Ersetzen Sie die Validierungsliste wie gewünscht durch die tatsächlich vorgesehene Liste.

Einige Annahmen / Vorbehalte / Einschränkungen zu beachten

  • Der Code wird unter Windows 7 64 Bit mit Office 2013 Standalone-PC getestet
  • Der Windows-Benutzername darf nicht länger als 64 Zeichen sein, wenn diese Länge zulässig ist
  • Ich bin mir nicht sicher, wie sich das bei Windows 8, 8, 1, 10 oder so verhalten wird
  • Ich bin mir nicht sicher, wie sich dies in einer Netzwerkumgebung verhält, wie Ihre Benutzernameninformationen gespeichert werden bzw. auf welche Art und Weise zugegriffen wird. Ich bin kein Netzwerkexperte.
  • Ich bin mir nicht sicher, ob Administratorrechte erforderlich wären, um die Funktion 'Get_User_Name' in VB / VBA auszuführen. In diesem Fall funktioniert der Code möglicherweise nicht auf allen Benutzersystemen ordnungsgemäß.
  • Ich gehe davon aus, dass Sie über einen Desktop-Office 365 verfügen. Im Fall von Office 365 Online wird VBA meines Erachtens nicht unterstützt.
  • Derzeit habe ich keine Möglichkeit zu überprüfen, wie sich dies verhält, wenn dieselbe Arbeitsmappe über das Netzwerk in den freigegebenen Modus versetzt wird.
  • Es wird kein Verlauf gepflegt, daher müsste der Benutzer jedes Mal, wenn die Datei geöffnet wird, die richtige Option aus der Dropdown-Liste erneut auswählen.

Gibt es einen bestimmten Grund, den Funktionsaufruf "Get_User_Name" zu verwenden, indem einfach "Environ" ("Benutzername") verwendet wird?
Nayrb

Environ ("Benutzername") ist sicherlich eine Option, aber wahrscheinlich gibt es eine Möglichkeit, die Umgebungsvariable "Benutzername" zu manipulieren oder sie insgesamt zu löschen, obwohl ich das bisher noch nie ausprobiert habe.
Patkim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.