mein Name ist Peter und ich bin IT-Systemadmin und absoluter VBA-Neuling.
Mein erstes VBA-Projekt ist eine Excelmappe mit min. zwei Worksheets.
Ein Formular (Tabellenblatt, nicht die Form) über das Berechtigungen aktiviert werden (Freigabe durch Klick eines Kontrollkästchen, wenn User = Mitglied Personal)
Einfacher, abgespeckter Testaufbau:
2 Worksheets: Formular und Personal
- Auf Worksheet Formular befindet sich ein Kontrollkästchen mit dem Namen CB_Freigabe der die Zelle A1 bei Freigabe von Rot auf Grün schalten soll und ansonsten wieder auf Rot zurückstellt.
- Auf Worksheet Personal befindet sich 1 Tabelle mit Tabellenname=tbl_AnPL und Bereichsname für Spalte1=AnPL (Hier stehen die zu berechtigten User drin)
Gewünschtes Vorgehen mit der Mappe wie folgt:
Beim Öffnen wird über Environ("Username) der Anmeldename ausgelesen. Befindet sich dieser in AnPL, wird das Kontrollkästchen (CB_Freigabe) enabled, ansonsten disabled.
User in Tabelle=Berechtigt --> Kontrollkästchen enabled, .Value=True Zelle A1 wird Grün. Bei .Value=False wieder Rot.
User nicht in Tabelle=Nicht berechtigt --> Kontrollkästchen disabled
Das war es eigentlich schon. Leider ist der ausgelesene Anmeldename bei mir egal wer sich anmeldet immer berechtigt, ob er in der zu überprüfenden Tabelle steht oder nicht?! Da stehen nur test1, test2, test3 drin. Diese bekomme ich auch nacheinander mit
MsgBox "Mitglieder der Gruppe Personal:= " & rngAnPL
Next rngAnPL
angezeigt, aber nicht verglichen.
Das habe ich gemacht: (Kommentare sind nur für Neulinge, also für mich ;-) )
Option Explicit
Private Sub Workbook_Open()
'Alle Variablen setzen!!!
Dim AN As String 'AN = Anmeldename
Dim rngAnPL As Range
AN = Environ("Username")
'Anzeige des angemeldeten User zur Kontrolle
MsgBox "Dein Anmeldenme ist " & AN
'''** Alle Werte aus dem Bereichsnamen "anPL" auslesen
For Each rngAnPL In Range("AnPL")
MsgBox "Mitglieder der Gruppe Personal:= " & rngAnPL
Next rngAnPL
If AN = "rngAnPL" Then
Formular.CB_Freigabe.Enabled = True
Else
Formular.CB_Freigabe.Enabled = False
End If
End Sub
Code hinter dem Worksheet Formular:
Private Sub CB_Freigabe_Click()
If CB_Freigabe.Value = True Then
Formular.Range("A1").Interior.ColorIndex = 4 '4=grün, 6=gelb, 3=rot
Else
Formular.Range("A1").Interior.ColorIndex = 3 '4=grün, 6=gelb, 3=rot
End If
End Sub
So, dass war's! Übrigens, wenn ich AN einen festen Wert zuteile wie (test), dann funktioniert alles wie es soll. Also funktioniert "nur" der Vergleich Username mit User in Tabelle nicht.
Ich danke Euch im Voraus schon mal für Eure Bemühungen.
Gruß, Peter