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.