Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zugriffsrechte nach Anwender unterscheiden

Forumthread: Zugriffsrechte nach Anwender unterscheiden

Zugriffsrechte nach Anwender unterscheiden
02.05.2019 15:27:08
Wolfgang

Hallo liebe Excellenzen !
Mit dem nachfolgenden Code frage ich den Excel-Anwender ab, der eine Exceldatei zu öffnen versucht und erlaube oder verweigere den Zugriff auf die Datei.
Meine Frage : Kann dieser Code so geändert werden, daß die im Makro hinterlegten Anwender Schreibe- und Leseberechtigung haben, alle anderen Anwender aber nur die Leseberechtigung ohne Möglichkeit, etwas zu ändern ?
Private Sub Workbook_Open()
'Abfrage des Excel-Anwenders, der die Datei öffnet
'Wenn der Anwendername gleich/ungleich des hinterlegten Namens ist, soll ein Makro starten
Dim strUser As String
strUser = Application.UserName
If strUser = ("Meier, Fritz") Or strUser = ("Müller, Jonas") Then '  oder = verwenden
'Makro starten:
MsgBox "Willkommen"
Exit Sub
Else
'Falls Datei von einem anderen Anwender geöffnet wird :
MsgBox "Du kummst hier net rein !" & vbCrLf & "Die Datei wird geschlossen"
ThisWorkbook.Close
End If
End Sub
Für sachdienliche Hinweise, ob und wie sowas gehen könnte, bedanke ich mich im voraus.
Liebe Grüße
Wolfgang
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zugriffsrechte nach Anwender unterscheiden
02.05.2019 15:38:05
UweD
Hallo
du könntest vor Schließen der Datei in allen Blättern den Schreibschutz setzen;
und dann bei bestimmten Nutzern beim Open wieder rausnehmen.
LG UweD
AW: Zugriffsrechte nach Anwender unterscheiden
02.05.2019 15:48:47
Wolfgang
Hallo Uwe !
Vielen Dank für die Anregung.
Leider besteht die Arbeitsmappe aus rund zwei Dutzend Tabellenblättern und ist zur Bearbeitung durch
mehrere Anwender vorgesehen.
Daher wäre der Arbeitsaufwand, wenn ich alle Blätter beim Einrichten einzeln bearbeiten müsste,
wohl reichlich hoch.
Daher suche ich mal weiter nach einfacheren Lösungen.
LG
Anzeige
AW: Zugriffsrechte nach Anwender unterscheiden
02.05.2019 16:44:15
UweD
Hi
das sollst du ja auch nicht selbst machen, sondern per Makro.
Tipp:
Ich würde aber NICHT den Application.UserName (den kann der Benutzer in Excel umstellen) nehmen sondern Environ("Username") 'der Anmeldename am System.
Microsoft Excel Objekt DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Dim TB 
    With ThisWorkbook 
        For Each TB In .Sheets 
            TB.Protect Password:="ABC" 
        Next 
        .Save 
    End With 
End Sub 
 
Private Sub Workbook_Open() 
    'Abfrage des Excel-Anwenders, der die Datei öffnet 
    'Wenn der Anwendername gleich/ungleich des hinterlegten Namens ist, soll ein Makro starten 
    Dim strUser As String, TB 
    strUser = Application.UserName 
    'strUser = Environ("Username") 'der Anmeldename am System 
    Stop 
    If strUser = ("Meier, Fritz") Or strUser = ("Müller, Jonas") Then ' <> oder = verwenden 
    'Makro starten: 
    MsgBox "Willkommen" 
    With ThisWorkbook 
        For Each TB In .Sheets 
            TB.Unprotect Password:="ABC" 
        Next 
         
    End With 
    Exit Sub 
    Else 
    'Falls Datei von einem anderen Anwender geöffnet wird : 
     MsgBox "Du kummst hier net rein !" & vbCrLf & "Die Datei wird geschlossen" 
     ThisWorkbook.Close False 
    End If 
End Sub 

LG UweD
Anzeige
AW: Zugriffsrechte nach Anwender unterscheiden
02.05.2019 16:58:18
UweD
Microsoft Excel Objekt DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Dim TB 
    With ThisWorkbook 
        For Each TB In .Sheets 
            TB.Protect Password:="ABC" 
        Next 
        .Save 
    End With 
End Sub 
 
'____________________________________________
 
Private Sub Workbook_Open() 
    'Abfrage des Excel-Anwenders, der die Datei öffnet 
    'Wenn der Anwendername gleich/ungleich des hinterlegten Namens ist, soll ein Makro starten 
    Dim strUser As String, TB 
    strUser = Application.UserName 
    'strUser = Environ("Username") 'der Anmeldename am System 
    If strUser = ("Meier, Fritz") Or strUser = ("Müller, Jonas") Then ' <> oder = verwenden 
        'Makro starten: 
        MsgBox "Willkommen " & strUser 
        With ThisWorkbook 
            For Each TB In .Sheets 
                TB.Unprotect Password:="ABC" 
            Next 
        End With 
        Exit Sub 
    Else 
        'Falls Datei von einem anderen Anwender geöffnet wird : 
         MsgBox "Nur Lesezugriff" 
    End If 
End Sub 

Anzeige
AW: Zugriffsrechte nach Anwender unterscheiden
02.05.2019 17:36:18
Wolfgang
Hallo Uwe !
Ich bin mittlerweile zuhause und am Essen kochen,
daher kann ich Deinen Code erst morgen im Büro testen.
Aber beim ersten "Überfliegen" sieht das sehr gut aus
und wird mir sicher sehr weiterhelfen.
Ich danke Dir sehr für die Mühe, die Du Dir gemacht hast !
Schönen Abend !
LG
Wolfgang
Anzeige
AW: Shift-Taste
02.05.2019 15:38:11
Fennek
Hallo Wolfgang,
versuche dir vorzustellen, was ein Nutzer tun muss, damit dein Ansatz scheitert:
im gezeigten Code reicht es während des Öffnens die Shift-Taste zu drücken und das Makro "Workbook_Open" wird nicht ausgeführt.
Generel gilt, dass Excel sind sicher ist, bestensfalls können wenig versierte Nutzer "gebremst" werden.
Ein Ansatz: ein leeres Workbook.xlsm zu öffnen, das nur bei aktivierten Makro das Workbook mit den Daten öffnet.
mfg
Anzeige
AW: Shift-Taste
02.05.2019 15:54:51
Wolfgang
Hallo Fennek !
Danke für Deine Rückmeldung.
Ich habe es leider größtenteils mit "wenig versierten Nutzern" zu tun, daher habe ich ja Angst,
daß meine Pivottabellen und Auswertungen in der Hektik des Tgesgeschäftes zerschossen werden.
Ein einfacher Schutz der Dateien vor diesen Leuten würde also reíchen.
Ein einfaches Makro, daß die Berechtigung nach Nutzer erteilt, wäre da die einfachste Lösung !
Ich werde auf jeden Fall Deinen Vorschlag morgen mal durchdenken und nachspielen.
Vielen Dank dafür.
LG
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zugriffsrechte nach Anwender unterscheiden


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei, für die Du die Zugriffsrechte nach Anwendern einschränken möchtest.

  2. Öffne den VBA-Editor: Drücke ALT + F11.

  3. Füge den folgenden Code in das entsprechende Arbeitsmappen-Modul (z. B. DieseArbeitsmappe) ein:

    Private Sub Workbook_Open()
       Dim strUser As String
       strUser = Application.UserName
       If strUser = "Meier, Fritz" Or strUser = "Müller, Jonas" Then
           MsgBox "Willkommen"
           ' Schreibrechte für bestimmte Anwender
           Dim TB As Worksheet
           For Each TB In ThisWorkbook.Sheets
               TB.Unprotect Password:="ABC"
           Next
       Else
           MsgBox "Nur Lesezugriff"
           ' Setze Leseberechtigung
           Dim TB As Worksheet
           For Each TB In ThisWorkbook.Sheets
               TB.Protect Password:="ABC", UserInterfaceOnly:=True
           Next
           ThisWorkbook.Close False
       End If
    End Sub
  4. Speichere die Datei als Makro-fähige Datei (.xlsm).

  5. Schließe und öffne die Datei erneut, um den Code zu testen.


Häufige Fehler und Lösungen

  • Fehler: „Du kummst hier net rein!“

    • Lösung: Stelle sicher, dass der Benutzername korrekt eingegeben ist. Alternativ kannst Du Environ("Username") verwenden, um den Anmeldenamen des Systems zu überprüfen.
  • Fehler: Schreibschutz funktioniert nicht

    • Lösung: Überprüfe, ob alle Blätter korrekt entsperrt und gesperrt werden. Der Schreibschutz sollte im Workbook_BeforeClose-Ereignis gesetzt werden.

Alternative Methoden

  • Verwendung von Benutzerdefinierten Formeln: Du kannst auch eine benutzerdefinierte Formel erstellen, um die Leseberechtigungen nach bestimmten Kriterien zu steuern. Diese Methode erfordert jedoch mehr Kenntnisse in Excel-Formeln.

  • Zugriff über Excel-Berechtigungen: Anstelle von VBA kannst Du auch die integrierten Excel-Funktionen zur Dateisicherheit verwenden, um Leseberechtigungen direkt zu vergeben.


Praktische Beispiele

  1. Beispiel 1: Ein Arbeitsblatt für das Management, das vollständige Bearbeitungsrechte hat, während das Verkaufsteam nur Leserechte erhält.
  2. Beispiel 2: Eine Excel-Tabelle für die Finanzabteilung, die nur für bestimmte Anwender bearbeitbar ist, während andere nur Lesezugriff erhalten.

Tipps für Profis

  • Verwende UserInterfaceOnly:=True: Dies ermöglicht es, dass VBA-Code weiterhin auf die Blätter zugreifen kann, während die Benutzeroberfläche geschützt bleibt.
  • Regelmäßige Überprüfung der Benutzerberechtigungen: Halte die Anwenderberechtigungen regelmäßig aktuell, insbesondere wenn sich die Teamzusammensetzung ändert.
  • Dokumentiere alle Änderungen: Halte eine Übersicht über alle Änderungen an den Berechtigungen, um eventuelle Probleme schnell erkennen und beheben zu können.

FAQ: Häufige Fragen

1. Wie kann ich die Leseberechtigung für meine Excel-Datei anpassen?
Du kannst die Leseberechtigung anpassen, indem Du ein Makro verwendest, das beim Öffnen der Datei die Berechtigungen anhand des Benutzernamens überprüft.

2. Was passiert, wenn ein Benutzer die Shift-Taste drückt?
Das Makro Workbook_Open wird nicht ausgeführt. Um dies zu umgehen, kannst Du ein leeres Workbook erstellen, das nur bei aktivierten Makros die tatsächliche Datei öffnet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige