Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlermeldung be Ablauf des Makros

Fehlermeldung be Ablauf des Makros
23.04.2023 09:14:25
BeLangmantl

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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung be Ablauf des Makros
23.04.2023 09:41:56
ReginaR
Hi,
der Code springt "raus", weil in der Zelle J9 "Benutzer-einstellungen" steht, das Blatt aber "Benutzereinstellungen" heißt.

Gruß Regina


Danke das wars ich war mit Blindheit geschlagen
23.04.2023 10:20:54
BeLangmantl
Hallo Regina,

Manchmal ist die Lösung doch einfacher und man mit Blingeit geschlagen da ich das übersehen habe. Natürlich macht das Sinn, das das rausspringt.

Habe ich total übersehen.

Vielen Dank und Gruß aus Köln

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige