Guten Morgen aus Kölle,
ich komme an dieser Stelle nicht mehr weiter, bzw bin mit meinem Latein am Ende.
in angefügter Tabelle möchte ich eine Loginfunktion haben, die nach dem Einloggen gewisse Rechte auf Tabellenblättern definiert.
In der Tabelle benutzerrechte wird über Icons die bei Doppelklick auf die Zelle dieses Ändern, die Rechte gesetzt.
Wenn ich das Loginformular ausführe mit meinem Benutzernamen, dem Administrator funktioniert es einwandfrei, wenn die Schleife aber über die If Abfrage auf einen anderen Benutzer springt, bricht das Makro, dort, wo er die Tabellennamen in die Variable schreibt mit der Fehlermeldung Laufzeitfehler 9 Außerhalb Index außerhalb des gültigen Bereichs ab. Ich kann mir nicht erklären warum.
Ich habe hier einmal den Code gepostet, aber auch die Tabelle. Falls man das testen möchte. hier die Loginparameter.
Den Administrator kann man mit BeLangmantl und Passwort: Start123 aufrufen, den Testbenutzer mit MaMustermann und Passwort 123 und genau bei diesem passiert der Fehler.
Private Sub cmd_Login_Click()
Dim sh As Worksheet, wsh As Worksheet
Dim intUserRow As Integer, intLockWorksheet As Integer, intUnlockWorksheet As Integer, i As Integer
Set sh = t006_Benutzereinstellungen
If Me.txt_Benutzername = "" Then
MsgBox "Bitte den Benutzernamen eingeben", vbCritical, "Kein Benutzername eingegeben"
Exit Sub
End If
If Me.txt_Passwort = "" Then
MsgBox "Bitte das Paßwort eingeben", vbCritical, "Kein Paßwort eingegeben"
Exit Sub
End If
If Application.WorksheetFunction.CountIf(sh.Range("C:C"), Me.txt_Benutzername.Value) = 0 Then
MsgBox "Bitte gültigen Benutzernamen eingeben", vbCritical, "Benutzername falsch"
Exit Sub
End If
intUserRow = Application.WorksheetFunction.Match(Me.txt_Benutzername.Value, sh.Range("C:C"), 0)
If Me.txt_Passwort.Value > sh.Range("E" & intUserRow).Value Then
MsgBox "Bitte gültiges Passwort eingeben", vbCritical, "Passwort falsch"
Exit Sub
End If
intLockWorksheet = Application.WorksheetFunction.CountIf(sh.Range("E" & intUserRow, "XFD" & intUserRow), "Ï")
intUnlockWorksheet = Application.WorksheetFunction.CountIf(sh.Range("E" & intUserRow, "XFD" & intUserRow), "Ð")
If (intLockWorksheet + intUnlockWorksheet) = 0 Then
MsgBox "Du hast keine Berechtigungen auf die Arbeitsblätter zuzugreifen!" & vbCrLf & _
"Bitte kontaktiere den Administrator", vbCritical, "Keine Blattrechte"
Exit Sub
End If
'Benutzerrechte umsetzen
If sh.Range("D" & intUserRow).Value = "Administrator" Then 'Administrator
ThisWorkbook.Unprotect Password:=strDateischutz
ActiveWindow.DisplayWorkbookTabs = True
With t001_Dashboard
.Unprotect Password:=strBlattschutz
.Cells.EntireColumn.Hidden = False
.Cells.EntireRow.Hidden = False
End With
For Each wsh In ThisWorkbook.Worksheets
wsh.Visible = xlSheetVisible
wsh.Unprotect Password:=strBlattschutz
Next wsh
t007_Parameter.Range("E14").Value = sh.Range("C" & intUserRow).Value
Else
ThisWorkbook.Unprotect Password:=strDateischutz
ActiveWindow.DisplayWorkbookTabs = True
For i = 7 To Application.WorksheetFunction.CountA(sh.Range("9:9"))
Set wsh = ThisWorkbook.Sheets(sh.Cells(9, i).Value)
If sh.Cells(intUserRow, i).Value = "Ð" Then 'Zugriff erlaubt
wsh.Visible = xlSheetVisible
wsh.Unprotect Password:=strBlattschutz
ElseIf sh.Cells(intUserRow, i).Value = "Ï" Then 'Zugriff erlaubt
wsh.Visible = xlSheetVisible
wsh.Protect Password:=strBlattschutz
End If
Next i
t007_Parameter.Range("E14").Value = sh.Range("C" & intUserRow).Value
End If
End Sub
Private Sub UserForm_Activate()
Dim ws As Worksheet
Dim wsh As Worksheet
Set ws = t001_Dashboard
strBlattschutz = t007_Parameter.Range("E12")
ThisWorkbook.Unprotect Password:=strDateischutz
ws.Visible = xlSheetVisible
For Each wsh In ThisWorkbook.Worksheets
If wsh.Name > ws.Name Then
wsh.Visible = xlSheetVeryHidden
End If
Next wsh
ws.Unprotect Password:=strBlattschutz
ws.Cells.EntireColumn.Hidden = True
ws.Cells.EntireRow.Hidden = True
ws.Protect Password:=strBlattschutz
ThisWorkbook.Protect Password:=strDateischutz
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Falls einer weiß warum das passiert, oder was ich da falsch mache, wäre ich sehr dankbar.
Lieben Gruß aus Köln
Benedikt
https://www.herber.de/bbs/user/158836.xlsm