auch heute brauche ich einmal einen kleinen Denkanstoß.
Ich habe mir eine Passwortabfrage für geschützte Bereiche innerhalb einer Excel-Mappe gebastelt.
Über eine Start-Seite kann man eine von sechs verschiedenen Seiten auswählen, es öffnet sich eine userForm in die ein Benutzer und ein Passwort eingegeben werden muß. Mit einem klick auf den öffnen-Button soll dann die entsprechende Seite bei Berechtigung geöffnet werden, andernfalls erschein eine MSGBox mit dem Hinweis das der User keine Berechtigung hat.
Für die einzelnen Benutzer habe ich eine Tabelle mit Benutzer, Passwort und Abteilung
Für die einzelnen Passwortabfragen habe ich 6 userformen die entsprechend aufgerufen werden
Grundsätzlich funktioniert diese Methode soweit auch gut, ein Problem entsteht wenn ein User mehrfach in dieser Tabelle steht da er Zugriff auf mehrere Seiten haben darf.
Dann wählt mein Code immer wohl nur den ersten Eintrag des Users aus und überprüft nicht ob der gleiche User vielleicht öffter in der Tabelle zu finden ist.
Beispieltabelle User:
Benutzer Passwort Abteilung
User1 1234 Abteilung 1
User2 2345 Abteilung 2
.....
User5 23434 Abteilung1
User5 23434 Abteilung2
Soll der User5 nun also Abteilung 2 öffnen sagt meine Abfrage das er kein recht hat da der erste Eintrag Abteilung1 ist.
Ich bekomme es einfach nicht hin das eine Art Schleife über die gesamte Tabelle läuft um zu prüfen ob es auch einen User5 mit Passwort 23434 und Abteilung2 gibt.
Private Sub btnkaffee_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Variablen dimensionieren
Dim rng As Range
Dim ws As Worksheet
'Benutzername suchen
Set rng = Range("tblZugriffsrechte[Benutzername]").Find(what:=txtbenutzername.Value, lookat:=xlWhole)
'Prüfen, ob Benutzername angelegt ist
If rng Is Nothing Then
'Benutzer benachrichtigen
MsgBox "Dieser Nutzer ist nicht angelegt."
'Prozedur beenden
Exit Sub
End If
'Prüfen, ob Passwort korrekt ist
If rng.Offset(0, 1).Value > txtpasswort.Value Then
'Benutzer benachrichtigen
MsgBox "Das Passwort ist nicht korrekt."
'Prozedur beenden
Exit Sub
End If
'Prüfen, ob Benutzer berechtigt ist
If rng.Offset(0, 2).Value = "Abteilung 2" Then
tb_Kaffeekasse5.Select
ElseIf rng.Offset(0, 2).Value > "Abteilung 2" Then
MsgBox "Keine Berechtigung"
End If
'Userform schließen
Unload Me
End Sub
Private Sub btnkaffee_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Prüfen, ob Schließen Button gedrückt wurde
If CloseMode = vbFormControlMenu Then
Unload Me
End If
End Sub