Nutzern per VBA Schreibrechte für Zellbereich erteilen
#1
Guten Morgen zusammen,

trotz umfangreicher Recherchen habe ich ein Problem, das ich mit eigenem Wissen nicht gelöst bekomme.

Wir haben in der Firma eine Datei, die aus Buchungs- und Rechengründen in Excel abgebildet werden muss. Hier können alle Mitarbeiter (etwa 100 Personen) für die nächsten Wochen eintragen, an welchem Tag sie welchen Dienst versehen (z.B. Büro, Homeoffice, Dienstreise, frei, Urlaub) sowie Kommentare eintragen. Die Datei ist zur gleichzeitigen Bearbeitung freigegeben.

Da es in Vergangenheit zu Ärgernissen gekommen ist, soll zukünftig nur noch jeder in seiner eigenen Zeile schreiben dürfen.

Jeder Mitarbeiter hat 3 Zeilen: in den ersten vier Spalten sind div. Informationen, darunter Name und Windows-User, hinterlegt. Es folgen dann die einzelnen Tage der nächsten Wochen.
Dateien bitte im Forum hochladen: https://www.clever-excel-forum.de/thread-326.html

(Eine Beispieldatei hänge ich diesem Post an)

Nun mein Problem:
Jeder Mitarbeiter darf zwar alles sehen, soll aber nur für die jeweils eigene oberste Zeile (also hier die Zeilen 10, 13, 16, 19, usw.) Schreibrechte erhalten. Die mittlere und untere Zeile sind für Kommentare/Infos der Buchungsabteilung vorbestimmt. Die Vergabe der Schreibrechte soll über den in Windows angemeldeten User, der in Spalte D eingetragen ist, automatisch erfolgen. Knackpunkt: Die Mädels der Buchungsabteilung sollen ebenfalls die Möglichkeit haben, diese Schreibrechte für zum Beispiel eine abgelaufene Planungswoche zu entziehen, während sie selber aber noch darin weiterarbeiten können.

Wie kann ich das erreichen?  :39:

Kann ich es der Buchungsabteilung zudem einfach machen, zum Beispiel über ein Feld "Bearbeitung der KW 22 möglich" mit "ja" oder "nein" automatisch Zellbereiche von den Schreibrechten auszuklammern?

Vielen Dank vorab für jede Idee, die mich hier weiterbringt! Smile
Top
#2
Hi,

grundsätzlich geht das mit VBA. Du kannst ja einen Zellschutz für bestimmte Bereiche definieren, wo geändert (oder eben nicht geändert) werden darf. Natürlich kannst du das VBA-gesteuert machen. Den aktuell angemeldeten User erhälst du mit
Code:
VBA.Environ("Username")

Alles andere musst du per VBA festlegen: Welcher User gehört zur Buchhaltung? Wie werden Zugriffszeiten (KW) definiert? usw.

Viel Erfolg.
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Top
#3
Hier noch ein Nachtrag, ich hatte versehentlich das Beispielbild auf einen Fremdhoster hochgeladen.

   

Beispielmappe:


.xlsm   Beispieldatei.xlsm (Größe: 38,59 KB / Downloads: 6)

Danke LuckyJoe für deine Antwort!

Die Zugriffszeiten würde ich wochenweise anhand der dafür vorgesehenen Spalten definieren. Sagen wir in einem Monat sind vier Wochen; dann müssen diese vier Zellbereiche separat behandelt werden können.

Wie würde denn konkret die Code-Zeile aussehen, dass (im Beispiel s.o.) Kollegin Bauer mit ihrem Username "User02458", der in Zelle D13 steht, beim Öffnen der Datei die Schreibrechte für Zeile 13 erhält?
Top
#4
Verwende ein Userform.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#5
... oder ein FrontEnd - BackEnd Sytem.

Dabei schreibt der MA einfach nur in eine Daten-Tabelle und die Anwendung zieht bei Bedarf die Eintragungen und zeigt sie an.

Oder ... und das wäre wohl das sinnvollste, wenn die MA schon so undiszipliniert sind ... der Teamleiter/Abteilungsfutzi/Hibi ... trägt als einziger die Daten in die Datei, die er per Mail von den MAs bekommt.

Da ich keinerlei "Rechnerei" in den Musterbildchen gesehen habe, begreife ich nicht, weshalb Outlook keine Möglichkeit darstellt.
Das bietet bereits die benötigte Kalenderfunktion, es können Berechtigungen bis zum Abwinken erteilt und wieder gelöscht werden und man kann ganz einfach über jeden Outlook-Zugang, problemlos seinen eigenen Kalender bearbeiten.
Top
#6
Danke für eure Ideen snb und Sabrina!

Ich schaue mir die Idee des Userforms mal genauer an. Ich bin gerade nur etwas verwundert, dass es über ein zusätzliches Fenster einfacher erscheint, als einen Zellbereich bei Öffnen der Datei dem jeweiligen Nutzer zum Schreiben zuzuschreiben.

Die Mail-Idee oder der Outlook-Kalender ist leider hierfür keine Lösung, da sich die zukünftigen Daten zu häufig ändern und wir die Eintragungen für weitere Berechnungen zwingend in Excel benötigen. Das habe ich für die Beispieltabelle nur einfach rausgelassen. Die echte Datei ist wesentlich umfangreicher.  Shy
Top
#7
Hallo,

Zitat:Die echte Datei ist wesentlich umfangreicher.

Diese Aussage sagt im Wesentlichen Alles und Nichts gleichzeitig.
Vor allem ist sie für Helfer eher eine Bremse. Sagt Dir das Stichwort "Salamitaktik" was?

Trotzdem stelle ich Dir hier mal eines meiner "Uraltschätzchen" aus den Tiefen meiner
Festplatten vor. Ob sich ein eventueller Umbau auf Deine Belange lohnen würde, kannst
nur Du entscheiden.


Angehängte Dateien Thumbnail(s)
   
Top
#8
Hallo xevu,

Zitat:Wie würde denn konkret die Code-Zeile aussehen, dass (im Beispiel s.o.) Kollegin Bauer mit ihrem Username "User02458", der in Zelle D13 steht, beim Öffnen der Datei die Schreibrechte für Zeile 13 erhält?

Ich gehe mal davon aus, dass du selber noch nicht (viel) mit VBA gemacht hast, denn mit einer Code-Zeile ist es hier nicht getan. Folgende Schritte wäre notwendig, um dein gewünschtes Ergebnis zu erzielen (Grob-Skizze):

Beim Öffnen der Arbeitsmappe müssen alle Zellen gesperrt sein, dann:
- den  aktuell angemeldeten User ermitteln (VBA.Environ("Username"))
- den  aktuell angemeldeten User mit dem Bereich der hinterlegten Usernamen vergleichen, um die Zeile zu ermitteln, in die geschrieben werden darf,
- Blattschutz aufheben (ActiveSheet.Unprotect Password:="...")
- in allen Zellen des aktuellen Users, auf die er Zugriff haben soll, die "Gesperrt"-Eigenschaft entfernen (ErmittelterZeilenbereich.Locked = False)
- hier noch einschränken, dass der User ja nur in bestimmten Spalten (Zeiten) schreiben darf.
- Blattschutz setzen (ActiveSheet.Protect Password:="...")

... User kann Eingaben machen

Beim Schließen der Arbeitsmappe:
- Blattschutz aufheben (ActiveSheet.Unprotect Password:="...")
- alle Zellen sperren (.Locked = True)
- Blattschutz setzen (ActiveSheet.Protect Password:="...")

Ich will dir nicht zu nahe treten, weil ich ja deine Programmierkenntnisse nicht kenne, aber das Ganze ist nicht unbedingt etwas, um einen Einstieg zu bekommen. Daher würde ich alternative Lösungen, die dir hier vorgestellt wurden, eher in Betracht ziehen.

Falls du kein "Anfänger" bist, dann sollten dir meine groben Skizzierungen helfen, zumindest anzufangen ... wir helfen dir dann gerne weiter, wenn irgendwo der Schuh drückt und du schon mal eine Rahmen selbst entworfen hast.

Ich hoffe, ich habe mich vorsichtig genug ausgedrückt, um nicht den Eindruck zu erwecken, dir auf die Füße treten zu wollen.

Viel Erfolg!
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • xevu
Top
#9
Hallo,

ach ja, habe ich glatt vergessen zu erwähnen, den Lese-Schreibzugriff für
jede einzelne Person habe ich damals folgendermaßen gelöst.
Die Einstellungen dafür werden vom "Master" vorgenommen.

Wenn ich mich recht erinnere, wolltest Du, daß die Daten der anderen
von allen gelesen werden können. Das ist hier nicht der Fall.

Mein hier vorgestelltes Programm ist derzeit so konzipiert, daß nur der
"Master" Zugriff auf sämtliche Daten hat.


Angehängte Dateien Thumbnail(s)
   
Top
#10
Hallo,

hatte heute (leider) ein wenig Zeit und auch noch Lust zu basteln ...

Habe im Userform-Code die "User01234" fest eingestellt, um zu testen ... der korrekte Code steht dahinter. Das kannst du also ganz leicht ändern.
Label1.Caption = "User01234" ' VBA.Environ("Username")

Das Userform sollte selbsterklärend sein ... trägt auch die von dir vorgegebenen Farben und Kommentare in die Zellen ein.
Hab auch mal einen Kalender eingebaut, über den du die Daten von ... bis auswählen kannst. Einfach die beiden Daten wählen und die Userform trägt alle Daten ein.
Die Userform öffnet momentan bei Öffnen der Datei und bleibt solange geöffnet, bis sie Explizit über "Beenden" geschlossen wird. So lassen sich mehrere Daten ... unabhängig ... nacheinander eintragen.

Beim Öffnen wird ein Blattschutz gesetzt, aber die Userform trägt die Daten trotzdem ein.
Speichern muss der USER selbst ... habe ich mal nicht in die Userform eingebaut.


Angehängte Dateien
.xlsm   Kalender_Sabina.xlsm (Größe: 78,89 KB / Downloads: 22)
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • xevu
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste