Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Benutzer dürfen Bereiche bearbeiten

VBA: Benutzer dürfen Bereiche bearbeiten
17.02.2021 11:58:34
Jessi
Hallo zusammen,
ich habe für mehrere Personen Arbeitsplaner. Jeder Planer kann von allen Mitarbeitern eingesehen werden, daher sind die ganzen Planer Freigegeben (um Dauer-Blockaden zu vermeiden).
Die Planer selbst haben Massen an Verweisen und Formatierungen im Hintergrund, daher sind die Tabellenblätter mit einem Blattschutz belegt, dessen Passwort nur ich kenne.
In vorgeschriebenen Bereichen haben einzelne Vorgesetzte Schreibrechte (mit Passwort + Befehl "Benutzer dürfen Bereiche bearbeiten" gelöst).
Nun müssen die Vorgesetzten jeden Tag das Passwort eingeben. Eine elegante Lösung wäre, dass ich per VBA die Kennung auslese und entsprechende Rechte vergebe.
Ist es möglich per VBA einfach das Kennwort für "Benutzer dürfen Bereiche bearbeiten" einzugeben? Wenn ich den Makro-Recorder benutze, wirft es nichts aus.
Der einzige Ansatz, den ich derzeit habe:

Sub SchreibenErlauben()
Dim strPasswort As String
Dim k As Integer
strPasswort = "xxx"
For k = 1 To 12
Sheets(k).Select
ActiveSheet.Unprotect (strPasswort)
ActiveSheet.Range("E4:BG26").Locked = False
Next
For k = 1 To 12
Sheets(k).Select
Range("A1").Select
ActiveSheet.Protect Password:=strPasswort
ActiveSheet.EnableSelection = xlNoRestrictions
Next
End Sub

Hier habe ich allerdings das Problem, dass ich auch vor jedem Schließen die Schleife wieder laufen lassen müsste, um die Bereiche zu sperren. Klicke ich dann bei der Frage "wollen Sie speichern?" auf "Nein", bleibt der Bereich offen.
Des Weiteren frisst es doch merklich Zeit, jedes Mal alle Blätter (12 Stück = 12 Monate) zu entsperren, Bereiche freizugeben und die Blätter wieder zu sperren.
Kennt hier jemand eine elegantere Lösung?
Vielen Dank vorab!
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
17.02.2021 17:28:29
onur

If Application.UserName= "Mustermann" Then

AW: VBA: Benutzer dürfen Bereiche bearbeiten
17.02.2021 19:07:02
Jessi
Vielen Dank, aber das Auslesen des Nutzernamens ist nicht mein Problem ...
Sehe grade, ich hab nicht den kompletten Code drin. Den Nutzernamen hab ich schon ausgelesen.
Ich frage mich nur, ob ich die Routine mit entsperren/wieder sperren benötige.
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
17.02.2021 19:48:56
onur
Tja, dann bin ich raus.
Sorry, aber für Ratespielchen wegen falscher/nicht vorhandener Informationen habe ich weder Zeit noch Lust.
Ich lasse mal offen.
AW: VBA: Benutzer dürfen Bereiche bearbeiten
17.02.2021 20:18:33
Jessi
Sorry, das war keine Absicht. Kann den Code erst morgen vollständig reinsetzen, weil ich grade keinen Zugriff drauf habe. Dachte meine Frage wäre ausreichend formuliert. Tut mir leid, dass ich Zeit geraubt habe, war nicht meine Absicht!
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 06:24:38
Jessi
Ich hatte den falschen Code kopiert ...
Aktuell sieht er so aus:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Environ("Username") = "User123" Then
Dim strPasswort As String
Dim k As Integer
strPasswort = "xxx"
For k = 1 To 12
Sheets(k).Select
ActiveSheet.Unprotect (strPasswort)
ActiveSheet.Range("E4:BG26").Select
Selection.Locked = True
ActiveSheet.Protect Password:=strPasswort
ActiveSheet.EnableSelection = xlNoRestrictions
Next
End If
End Sub

Kann man diesen Code vermeiden, indem man irgendwie per Makro das Passwort für den freigegebenen Bereich (mittels "Benutzer dürfen Bereiche bearbeiten") eingeben kann, wenn es den richtigen User ausgelesen hat?
Ich möchte mich vorab bedanken und entschuldige mich für die entstandenen Umstände durch mein Versehen.
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 06:38:36
onur
"Kann man diesen Code vermeiden, indem man irgendwie per Makro" ?
Genau das tut das Makro doch. Es gibt kein Passwort für "Benutzer dürfen Bereiche bearbeiten" - nur für das ganze Blatt.
D.h.: bei Workbook_Open alle Zellen sperren und je nach User Bereiche entsperren und bei BeforeClose wieder alle sperren.
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 08:15:56
Jessica
Alles klar, vielen Dank.
Schade, das entsperren und wieder sperren frisst doch für den Nutzer merklich Zeit, was ich gern umgangen hätte. Ich hatte gehofft, dass das bei "Benutzer dürfen Bereiche bearbeiten" hinterlegte Passwort irgendwie per Makro angesteuert werden könnte.
Dankeschön!
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 10:01:05
onur
Wir reden wohl aneinander vorbei.
Nicht der User, sondern das Makro soll die Zellen sperren und entsperren und es gibt KEIN Passwort für „Benutzer dürfen Bereiche bearbeiten“ , sondern nur für das BLATT..
Wenn du alle Zellen auf „locked“ setzt, ausser die, die der User bearbeiten darf, und dann den Blattschutz setzt, ist es doch erledigt.
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 12:46:39
Jessica
Ja, ich glaube, wir reden wirklich aneinander vorbei. Ich habe im Prinzip zwei Probleme:
a) Ich habe derzeit bei Überprüfen - Benutzer dürfen Bereiche bearbeiten einen Bereich festgelegt, der MIT einem Kennwort versehen ist.
Ich möchte gern per VBA eben dieses Kennwort eintragen lassen (anstatt dass es der Mitarbeiter jedes Mal tun muss). Mehr ist es eigentlich nicht.
Da ich dies nicht geschafft habe, habe ich mir Lösung b ausgedacht. Die genannte Routine, die Blätter entsperrt, den Bereich entsperrt, und die Blätter danach wieder sperrt.
Hier habe ich aber wieder zwei Probleme;
b1) die Routine dauert lang und
b2) für das Schließen des Dokumentes muss ich die Routine wieder laufen lassen, damit der freigegebene Bereich wieder gesperrt wird. Klickt der User bei der Abfrage "wollen Sie speichern?" auf Nein, bleibt der Bereich für alle geöffnet. (Die Speichern-Abfrage unterbinden und automatisch speichern kann ich aber nicht, da ich nicht voraussetzen kann, dass jederzeit tatsächlich gespeichert werden soll.)
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 16:28:33
Yal
Hallo Jessica,
ich würde das Problem anders eingehen, wohl wissend, dass es deine Frage nicht direkt beantwortet.
Was Du da haben möchtest, ist eine Standard-Datenbankfunktion: Rechte vergeben.
Ich würde den Excel als Frontend weiterhin benutzen, aber alle Daten in eine RDB ablegen und die Rechte dort verwalten.
Die Investition in das Einlernen von Datenbank kann sich lohnen: wenig Anfälligkeit, weniger Wartungsarbeit, Mehr Zeit für sinvolle Aufgaben. Und dann deine persönliche Arbeitssicherung, nicht nur bei deinem aktuellen Arbeitsgeber.
VG
Yal
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 17:12:15
Jessi
Hey Yal,
Vielen Dank für deine Nachricht. Mal sehen, ob ich mich da selbst einlesen kann :-)
Danke + Gruß!
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 17:32:38
onur
Man könnte es ja auch mit SAP umsetzen, ist ja auch persönliche Arbeitssicherung, nicht nur beim aktuellen Arbeitsgeber. ;)
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 18:57:11
onur
Du verstehst mich immer noch nicht.
Du brauchst "Überprüfen - Benutzer dürfen Bereiche bearbeiten" GAR NICHT, es geht mit Blatschutz alleine.
Du musst nur ALLE Zellen des Blattes auf LOCKED setzen und je nach Benutzer deren Bereiche auf UNLOCKED..
Fertig.
Das in Workbok_Open:

ActiveSheet.Unprotect ("test")
Cells.Locked = True
If Application.UserName = "oee" Then Range("C1:F1").Locked = False 'Für jeden User ein anderer  _
Bereich
ActiveSheet.Protect ("test")

Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 19:55:53
Jessi
Doch, ich habe durchaus verstanden, dass es sich um zwei verschiedene Lösungsansätze handelt.
Deswegen schrieb ich "da ich Lösung a nicht geschafft habe, habe ich mir Lösung b ausgedacht"
Nur habe ich nach wie vor das Problem, dass keiner der beiden Wege schlussendlich funktioniert.
Danke für deine Hilfe, aber ich bin halt leider immernoch nicht weitergekommen.
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 19:58:29
onur
Wenn es stimmt, "dass keiner der beiden Wege schlussendlich funktioniert", dann liegt es aber an deinem Code.
Poste doch mal eine (Beispiels-) Datei.
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 20:04:20
Jessi
Kann ich am Montag machen, aber habe den Code schon hier reingestellt und das Problem doch beschrieben:
Die Routine funktioniert, aber ich muss beim Schließen der Datei den freigegebenen Bereich wieder sperren. Und wenn der Nutzer anschließend auf "nicht speichern" geht, bleibt der freigegebene Bereich für den nächsten Nutzer offen ...
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 20:11:44
onur
Hast du denn meinen Code getestet?
Durch die fettgedruckten Zeilen
Cells.Locked = True
If Application.UserName = "oee" Then Range("C1:F1").Locked = False 'Für jeden User ein anderer   _
_
Bereich
ActiveSheet.Protect ("test")

wird beim Starten der Datei der zuletzt freigegebene Bereich wieder gesperrt.
Wenn aber der nächste User am Rechner des ersten Users mit der Datei weiterarbeitet, dann nützt auch der beste Passwortschutz nix.
Anzeige
AW: VBA: Benutzer dürfen Bereiche bearbeiten
18.02.2021 20:20:36
Jessi
Alles klar, dann teste ich es am Montag nochmal, wenn ich wieder bei der Arbeit bin.
Vielen Dank.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Benutzer dürfen Bereiche bearbeiten


Schritt-für-Schritt-Anleitung

Um in Excel Benutzern das Bearbeiten von bestimmten Bereichen zu erlauben, kannst Du VBA verwenden, um die gewünschten Rechte automatisch zu vergeben. Hier sind die Schritte, die Du befolgen solltest:

  1. Öffne das VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen > Modul.

  3. Füge folgenden Code ein:

    Private Sub Workbook_Open()
        Dim strPasswort As String
        strPasswort = "deinPasswort"  ' Setze hier dein Passwort ein
        ActiveSheet.Unprotect strPasswort
    
        ' Setze alle Zellen auf gesperrt
        Cells.Locked = True
    
        ' Erlaube bestimmten Benutzern, bestimmte Bereiche zu bearbeiten
        If Application.UserName = "Benutzername" Then
            Range("E4:BG26").Locked = False  ' Beispielbereich
        End If
    
        ActiveSheet.Protect strPasswort
    End Sub
  4. Passe den Benutzernamen und den Bereich an: Ändere Benutzername und den Bereich E4:BG26 nach Deinen Bedürfnissen.

  5. Speichere Deine Datei: Stelle sicher, dass Du die Datei als Excel-Makro-fähige Arbeitsmappe (*.xlsm) speicherst.


Häufige Fehler und Lösungen

  • Problem: Benutzer können nicht auf die Bereiche zugreifen.

    • Lösung: Überprüfe, ob der Benutzername korrekt ist und dass die Bereiche tatsächlich freigegeben sind.
  • Problem: Passwort wird nicht akzeptiert.

    • Lösung: Stelle sicher, dass das Passwort korrekt eingegeben wurde und dass der Blattschutz vorher entfernt wurde.
  • Problem: Bereiche bleiben offen, wenn die Datei nicht gespeichert wird.

    • Lösung: Implementiere eine Routine, die beim Schließen der Datei alle Bereiche erneut sperrt.

Alternative Methoden

Falls Du keine VBA-Lösungen verwenden möchtest, kannst Du auch die integrierten Funktionen von Excel nutzen:

  1. Bereiche freigeben: Gehe zu Überprüfen > Benutzer dürfen Bereiche bearbeiten und definiere die gewünschten Bereiche und Benutzer.
  2. Schutz anpassen: Setze den Blattschutz, um die Bearbeitung der restlichen Zellen zu verhindern.

Diese Methode ist jedoch weniger flexibel, da sie manuelle Eingriffe erfordert.


Praktische Beispiele

Hier ist ein Beispiel, wie Du spezifische Bereiche für Benutzer freigeben kannst:

Private Sub Workbook_Open()
    Dim strPasswort As String
    strPasswort = "deinPasswort"
    ActiveSheet.Unprotect strPasswort
    Cells.Locked = True

    If Application.UserName = "Mustermann" Then
        Range("A1:D10").Locked = False
    ElseIf Application.UserName = "Meier" Then
        Range("E1:H10").Locked = False
    End If

    ActiveSheet.Protect strPasswort
End Sub

In diesem Beispiel können zwei verschiedene Benutzer unterschiedliche Bereiche bearbeiten, während der Rest des Blattes geschützt bleibt.


Tipps für Profis

  • Verwende Umgebungsvariablen: Du kannst Environ("Username") anstelle von Application.UserName verwenden, um den Benutzernamen zu ermitteln, was besonders hilfreich sein kann, wenn Du mit mehreren Benutzern arbeitest.

  • Automatisiere die Prozesse: Erstelle zusätzliche Makros, die automatisch beim Öffnen oder Schließen der Datei ausgeführt werden, um die Verwaltung der Berechtigungen zu erleichtern.

  • Dokumentation: Halte Deine VBA-Codes gut dokumentiert, damit andere Benutzer oder Du selbst in der Zukunft leichter Änderungen vornehmen kannst.


FAQ: Häufige Fragen

1. Kann ich mehrere Benutzer für einen Bereich festlegen? Ja, Du kannst die If...ElseIf-Struktur verwenden, um mehreren Benutzern unterschiedliche Bereiche zuzuweisen.

2. Gibt es ein Passwort für "Benutzer dürfen Bereiche bearbeiten"? Nein, es gibt nur ein Passwort für den gesamten Blattschutz. Du musst das Passwort für das Blatt schützen, nicht für die spezifischen Bereiche.

3. Wie kann ich sicherstellen, dass die Bereiche wieder gesperrt werden? Du kannst im Workbook_BeforeClose-Ereignis eine ähnliche Logik wie im Workbook_Open-Ereignis verwenden, um alle Zellen wieder zu sperren.

4. Welche Excel-Version wird benötigt? Der VBA-Code funktioniert in Excel 2010 und späteren Versionen. Achte darauf, dass Du die Makros aktivierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige