Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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

Makro: Zugriffsberechtigung per Windows-Anmeldename

Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 10:12:17
RaMa
Guten Tag zusammen,
meine VBA-Kenntnisse beschränken sich darauf, dass ich Codes suche und meistens per kopieren/einfügen zum Laufen bringe.
Mein neues "Projekt" ist allerdings ein paar Nummern zu hoch für mich.
Es wäre klasse, wenn mir jemand helfen könnte.
Ich möchte, dass in unseren Personalplan nur bestimmte Personen Zugriff auf den kompletten Plan haben.
Anderen Benutzer sollen aus Datenschutzgründen nur Zugriff auf die laufende Woche plus die 2 Folgewochen haben.
Die Mappe ist so aufgebaut, dass jedes Arbeitsblatt eine Kalenderwoche abbildet.
Frage: Ist es möglich, dass ein Makro zuerst den Windowsanmeldename mit einer Liste abgleicht. Auf dieser Liste sollen die Namen stehen, die alles einsehen dürfen bzw. eben nur eingeschränkten Zugriff auf die Mappe haben.
voller Zugriff: können die komplette Mappe einsehen und bearbeiten
eingeschränkter Zugriff: können nur die 3 Wochen einsehen und diese bearbeiten
Ich habe mal eine Beispiel-Mappe angehängt.
https://www.herber.de/bbs/user/134238.xlsm
Vielen Dank im Voraus für eure Bemühungen.
Gruß
RaMa

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 10:23:28
Regina
Hi,
Zugriff heißt, das Blatt soll sichtbar sein? Oder das Blatt soll ungeschützt (frei für Eingaben sein)?
Gruß
Regina
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 10:28:06
Werner
Hallo Regina,
voller Zugriff: können die komplette Mappe einsehen und bearbeiten
eingeschränkter Zugriff: können nur die 3 Wochen einsehen und diese bearbeiten

Da würde ich mal daraus schließen, dass die Blätter ausgeblendet werden sollen.
Gruß Werner
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 10:35:47
Regina
... würde ich auch so sehen, aber bevor ich loslege, weiß ich es gerne genau.
Gruß
Regina
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 10:43:13
RaMa
Hallo Regina,
beim vollen Zugriff soll alles eingesehen und bearbeiten werden können.
Beim eingeschränkten Zugriff sollen nur die 3 Wochen sichtbar und zum Bearbeiten sein (aus Nutzersicht sieht es so aus, als ob die Excelmappe nur aus den 3 Tabellenblättern besteht).
Es muss also irgendwie ein Abgleich zwischen dem aktuellem Datum beim Öffnen der Datei und der Kalenderwochen in den einzelnen Tabellenblättern stattfinden.
Gruß RaMa
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 12:00:18
Regina
ok, ich bastel mal...
Gruß
Regina
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 12:15:58
Regina
Hi,
teste mal diesen Code:

Private Sub Workbook_Open()
Dim str_benutzer As String
Dim rng_benutzer As Range
Dim lng_zeile As Long
Dim obj_wks As Worksheet
Dim obj_wks_berechtigungen As Worksheet
Dim bol_vollzugriff As Boolean
Dim lng_kw As Long
str_benutzer = Environ("Username")
Set obj_wks_berechtigungen = ThisWorkbook.Worksheets("Berechtigungen")
lng_kw = KWoche(Date)
Set rng_benutzer = obj_wks_berechtigungen.Range("A:A").Find(str_benutzer)
If rng_benutzer Is Nothing Then
MsgBox "Benutzer nicht gefunden"
ThisWorkbook.Close
Exit Sub
Else
lng_zeile = rng_benutzer.Row
If obj_wks_berechtigungen.Cells(lng_zeile, 2) = "voll" Then
bol_vollzugriff = True
Else
bol_vollzugriff = False
End If
End If
For Each obj_wks In ThisWorkbook.Worksheets
If bol_vollzugriff = True Then
obj_wks.Visible = xlSheetVisible
Else
If obj_wks.Name  "Berechtigungen" Then
If CLng(Right(obj_wks.Name, 2)) >= lng_kw And CLng(Right(obj_wks.Name, 2)) 

Hinweis: Den Unterstrich und den Zeilenumbruch in der if-Zeile bitte rausnehmen, den baut die Forumsoftware dort ein.
Der gesamte Code gehört in das Modul "Diese Arbeitsmappe", habe ich dort in diese Datei eingebaut:
https://www.herber.de/bbs/user/134241.xlsm
Gruß
Regina
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 12:28:09
Regina
Nachtrag:
Da ich über den Code auch das Blatt "Berechtigungen" ausblende, musst Du, um Dich als "Vollzugriffsuser" einzurichten, den Befehl:
Worksheets("Berechtigungen").visible = true
Im Direktfenster oder in einer Sub in einem Standardmodul absetzen.
Noch ein weiterer Hinweis: Sollte ein User die Makros auf seinem Rechner standardmäßig deaktiviert haben, kann er die Datei u.Um auch ohne Beschränkung öffnen. Der Code ist also kein echter Schutz, sondern mehr ein Reduzieren auf das Wesentliche ...
Gruß
Regina
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 13:12:30
RaMa
Hallo Regina,
ich habe das auf die schnelle mal getestet. Leider kann ich deine Datei im Geschäft nicht runterladen, aber scheinbar habe ich es richtig kopiert :)
...wow, genau das, was ich gesucht habe.
Vielen Dank für deinen Einsatz!
Ich habe deinen Zusatzbefehl im Direktfenster eingegeben und gespeichert. Jetzt sehe ich diesen beim nochmaligen Öffnen des Editors nicht mehr, ist das so richtig?
Meinem Kollegen habe ich volle Rechte gegeben, der sieht die Berechtigung (was auch so sein soll).
Dann müsste das so stimmen, oder?
Gibt es eine Möglichkeit, dass bei ausgeschalteten Makros die Datei nicht geöffnet wird?
Vielen Lieben Dank nochmal.
Gruß Raphael
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 13:23:18
Regina
Hi Raphael,
Im Direktfenster kann man nichts speichern, nach dem Schließen von Excel ist alles weg. Wenn Du dauerhaft eine Möglichkeit haben möchtest, musst Du Dir ein Modul einfügen und diesen Code reinkopieren:
Sub Berechtigungen_zeigen()
Worksheets("Berechtigungen").Visible = true
End Sub

Zu Deiner zweiten Frage: Es gibt meines Wissens keine Möglichkeit eine Datei zu sperren, wenn makros ausgeschaltet sind. Deshalb ist das alles auch kein echter Schutz, man kann es aushebeln. Echter Schutz wäre nur möglich, wenn z.B. ein echtes Datenbanksystem genutzt wird. Excel ist da ziemlich "offen".
Gruß
Regina
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 14:53:45
RaMa
Hallo Regina,
jetzt mal ne ganz blöde Frage, für welche Befehle braucht man das Direktfenster?
Vielen Dank.
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 15:03:52
Regina
Hi, im Direktfenster kann man Befehle absetzen, die man nur einmal braucht, um z.B. eine bestimmte Option zurückzusetzen, weil das im Code nicht geklappt hat.
Dann kann man Befehl testen: Gib dort mal ?Date ein. Das ? gibt an, dass Du das Ergebnis des folgenden Ausdrucks sehen möchtest.
Außerdem kannst Du in Deinen Subs mit Debug.Print im Direktfenster Inhalte von z.B. Variablen ausgeben lassen, ist ganz praktisch für die Fehlersuche. In dem Code, den ich Dir geschrieben habe, gibt es eine For-schleife, die alle Tabellenblätter abarbeitert. Um jetzt mal zu prüfen, ob wirklich alle Tabellenblätter angefasst werden, könntest Du direkt hinter der Zeile mit dem "for" den Befehl:
Debug.Print obj_wks.Name
eingeben.
Wenn Du das Direktfenster geöffnet hast und dann den Code startest, sollten Dir dort die Namen aller Tabellenblätter Deiner Mappe angezeigt werden.
So, jetzt noch eine Idee zum "Schutz" deiner Blätter. Wenn Du den folgenden Code in das gleiche Modul kopierst, wie den anderen, wird jedesmal vor dem Schließen der Datei die Ansicht auf die allgemein zugänglichen 3 Tabellenblätter beschränkt. Sollte jetzt jemand die Datei mit deaktivierten makros starten, sieht er nur diese 3 Blätter. Das einzige, was er dann noch machen könnte, wäre in die VBA-Umgebung zu gehen.... Aber das würde für mich schon unter "illegal" fallen.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim obj_wks As Worksheet
For Each obj_wks In ThisWorkbook.Worksheets
If obj_wks.Name  "Berechtigungen" Then
If CLng(Right(obj_wks.Name, 2)) >= lng_kw And CLng(Right(obj_wks.Name, 2)) 
Gruß
Regina
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 15:05:56
Regina
Stopp.... In dem Code fehlte noch was:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim obj_wks As Worksheet
Dim lng_kw As Long
For Each obj_wks In ThisWorkbook.Worksheets
lng_kw = KWoche(Date)
If obj_wks.Name  "Berechtigungen" Then
If CLng(Right(obj_wks.Name, 2)) >= lng_kw And CLng(Right(obj_wks.Name, 2)) 

AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 15:41:35
RaMa
Hallo Regina,
nochmals danke für deine Zeit.
Allerletzte "blöde" Frage.
Ich habe in "Diese Arbeitsmappe" jetzt alle Befehle untereinander kopiert, stimmt das jetzt so (wird nur etwas seltsam angezeigt, alle Befehle sind untereinander)?
Private Sub Workbook_Open()
Dim str_benutzer As String
Dim rng_benutzer As Range
Dim lng_zeile As Long
Dim obj_wks As Worksheet
Dim obj_wks_berechtigungen As Worksheet
Dim bol_vollzugriff As Boolean
Dim lng_kw As Long
str_benutzer = Environ("Username")
Set obj_wks_berechtigungen = ThisWorkbook.Worksheets("Berechtigungen")
lng_kw = KWoche(Date)
Set rng_benutzer = obj_wks_berechtigungen.Range("A:A").Find(str_benutzer)
If rng_benutzer Is Nothing Then
MsgBox "Benutzer nicht gefunden"
ThisWorkbook.Close
Exit Sub
Else
lng_zeile = rng_benutzer.Row
If obj_wks_berechtigungen.Cells(lng_zeile, 2) = "voll" Then
bol_vollzugriff = True
Else
bol_vollzugriff = False
End If
End If
For Each obj_wks In ThisWorkbook.Worksheets
If bol_vollzugriff = True Then
obj_wks.Visible = xlSheetVisible
Else
If obj_wks.Name  "Berechtigungen" Then
If CLng(Right(obj_wks.Name, 2)) >= lng_kw And CLng(Right(obj_wks.Name, 2)) 

Function KWoche(ByVal Datum As Date) As Long
Dim t As Long
t = DateSerial(Year(Datum + (8 - Weekday(Datum)) Mod 7 - 3), 1, 1)
KWoche = ((Datum - t - 3 + (Weekday(t) + 1) Mod 7)) \ 7 + 1
End Function
Sub Berechtigungen_zeigen()
Worksheets("Berechtigungen").Visible = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim obj_wks As Worksheet
For Each obj_wks In ThisWorkbook.Worksheets
If obj_wks.Name  "Berechtigungen" Then
If CLng(Right(obj_wks.Name, 2)) >= lng_kw And CLng(Right(obj_wks.Name, 2)) 

Grüße
Raphael
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 15:48:43
Regina
... da sieht so gut aus:
"Diese Arbeitsmappe" ist ein Modul, in einem Modul könnten die unterschiedlichsten Prozeduren untereinander stehen. Bei den Prozeduren Workbook_Open und Workbook_BeforeClose handelt es sich um Prozeduren, die auf ein Arbeitsmappenereignis reagieren, also quasi "von alleine" starten. Die Function KWoche wird von den anderen beiden Prozeduren aufgerufen und liefert die Kalenderwoche zu dem übergebenen Datum zurück. Diese Function hätte grundsätzlich auch in einem Standardmodul stehen können. Dort würde man sie sinnvoller Weise hin verschieben, wen ndie Kalenderwoche auch an anderer Stelle des Projektes noch errechnet werden müsste.
Siehst also alles gut aus.
Gruß
Regina
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 16:18:47
RaMa
Du bist klasse!
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 16:31:57
Regina
Oh, danke! das tut auch mal gut :-)
Schönen Abend noch!
Gruß
Regina
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 16:53:42
RaMa
Zu früh gefreut.
Ich habe das Makro nach dem Testen in meinen Personalplan kopiert und bekomme jetzt einen Laufzeitfehler. Ich habe im Personalplan noch Reiter, die eine andere Bezeichnung haben außer "KW ..", bspw. "Tätigkeiten" etc. Ist das die Ursache?
"Laufzeitfehler 13: Typen unverträglich"
Vor dem "Then" in der 2. Zeile ist der gelbe Hinweispfeil:
If CLng(Right(obj_wks.Name, 2)) >= lng_kw And CLng(Right(obj_wks.Name, 2)) Then
Eine weiterer unschöner Nebeneffekt ist, dass bei meinem Kollegen mit "eingeschränktem" Recht der Reiter "Berechtigung" sichtbar ist und er sich selbstständig ein "volles" Zugriffsrecht geben konnte. Kann die Mappe nur für Benutzer mit vollem Recht sichtbar sein?
Grüße
Raphael
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 18:30:21
Regina
ok, schaun wir mal:
Also der Laufzeitfehler liegt an dem Blatt mit dem anderen Namen. Gib mir mal den Blattnamen, dann arbeite ich Dir das ein. Soll dieses Blatt für alle sichtbar sein, oder nur für die User mit vollen Rechten?
Den zweiten Fehler kannich hier nicht nachvollziehen, wenn ich die Datei öffne und meinen Usernamen nicht mit "voll" gekennzeichnet habe, sehe ich nur die 3 Blätter, die ich auch sehen soll.
Kannst Du mir Deine Mappe mal schicken (die Mitarbeiternamen kannst Du ja rausschmeißen.
gruß
Regina
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
08.01.2020 18:48:31
Regina
Nachtrag:
Evtl. ist der 2. Fehler ein Folgefehler, weil der Code wegen des laufzeitfehlers nicht durchläuft...
Anzeige
AW: Makro: Zugriffsberechtigung per Windows-Anmeldename
09.01.2020 10:35:49
RaMa
Vielen Dank für dein Angebot, ich habe die Datei versendet.
Gruß
Raphael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige